{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 14.1 Statistical Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.1.3 Correlation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "frame = pd.DataFrame(np.random.randn(1000, 5), columns=['a', 'b', 'c', 'd','e'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "frame.iloc[::2] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0         NaN\n",
       "1    0.111787\n",
       "2         NaN\n",
       "3   -1.970171\n",
       "4         NaN\n",
       "5    0.703507\n",
       "6         NaN\n",
       "7   -0.688472\n",
       "8         NaN\n",
       "9   -0.766808\n",
       "Name: b, dtype: float64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame['b'][:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.5187684991927455"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame['a'].corr(frame['b'][:10])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从这里可以看出corr函数是支持两个长度不相同的serial进行运算的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.03821573686294745"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame['a'].corr(frame['b'], method='spearman')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "      <th>d</th>\n",
       "      <th>e</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.043645</td>\n",
       "      <td>0.017586</td>\n",
       "      <td>-0.008695</td>\n",
       "      <td>0.018497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>0.043645</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.094459</td>\n",
       "      <td>0.005702</td>\n",
       "      <td>0.029671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>0.017586</td>\n",
       "      <td>0.094459</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.106646</td>\n",
       "      <td>0.001692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>-0.008695</td>\n",
       "      <td>0.005702</td>\n",
       "      <td>-0.106646</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.076944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>e</th>\n",
       "      <td>0.018497</td>\n",
       "      <td>0.029671</td>\n",
       "      <td>0.001692</td>\n",
       "      <td>0.076944</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          a         b         c         d         e\n",
       "a  1.000000  0.043645  0.017586 -0.008695  0.018497\n",
       "b  0.043645  1.000000  0.094459  0.005702  0.029671\n",
       "c  0.017586  0.094459  1.000000 -0.106646  0.001692\n",
       "d -0.008695  0.005702 -0.106646  1.000000  0.076944\n",
       "e  0.018497  0.029671  0.001692  0.076944  1.000000"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame.corr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用corr方法需要注意的一点是参与运算的两个对象的index需要由重叠的地方，否则无法计算出结果，下面是写的一个小程序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.34750472332674637"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = ['a', 'b', 'c', 'd', 'e']\n",
    "columns = ['one', 'two', 'three', 'four']\n",
    "df1 = pd.DataFrame(np.random.randn(5, 4), index=index, columns=columns)\n",
    "df2 = pd.DataFrame(np.random.randn(4, 4), index=index[:4], columns=columns)\n",
    "df1.one.corr(df2.one)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "nan"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randn(4, 4), columns=columns)#此时df2的index和df1的index不同\n",
    "df1.one.corr(df2.one)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'Series' object has no attribute 'corrwith'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-36-1de362a7b7f8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mone\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcorrwith\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf2\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m   4374\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   4375\u001b[0m                 \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4376\u001b[0;31m             \u001b[1;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   4377\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   4378\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'Series' object has no attribute 'corrwith'"
     ]
    }
   ],
   "source": [
    "df1.one.corrwith(df2.one)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 14.2 Window Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于rolling操作，其实是有一个对应的`Rolling`来进行描述的，这就好比groupby操作类似，会生成`DataFrameGroupBy`类对象；"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Starting in version 0.18.1, the rolling() and expanding() functions can be used directly from\n",
    "DataFrameGroupBy objects, see the groupby docs.\n",
    "\n",
    "从这段话可以看出，`Rolling`可以比`DataFrameGroupBy`操作更加细的粒度，即它既可以作用在一个完整的dataframe，也可以作用在一个比dataframe更加细的粒度上；\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\importlib\\_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n",
      "  return f(*args, **kwds)\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "from __future__ import division\n",
    "from numpy.random import randn\n",
    "import numpy as np\n",
    "np.set_printoptions(precision=4, suppress=True)\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01    0.668547\n",
       "2000-01-02    1.035784\n",
       "2000-01-03    0.464344\n",
       "2000-01-04    1.273243\n",
       "2000-01-05   -0.236302\n",
       "2000-01-06   -0.359422\n",
       "2000-01-07    2.747130\n",
       "2000-01-08   -0.397208\n",
       "2000-01-09   -0.581896\n",
       "2000-01-10    1.433482\n",
       "2000-01-11    0.173777\n",
       "2000-01-12   -0.691947\n",
       "2000-01-13   -0.643183\n",
       "2000-01-14   -0.585105\n",
       "2000-01-15    0.351880\n",
       "2000-01-16   -0.824836\n",
       "2000-01-17    0.805823\n",
       "2000-01-18    1.600972\n",
       "2000-01-19   -1.004235\n",
       "2000-01-20    1.296335\n",
       "2000-01-21   -0.642816\n",
       "2000-01-22   -0.626503\n",
       "2000-01-23   -0.118854\n",
       "2000-01-24   -0.130540\n",
       "2000-01-25   -0.526997\n",
       "2000-01-26   -0.360575\n",
       "2000-01-27    0.089155\n",
       "2000-01-28   -1.160832\n",
       "2000-01-29   -0.200365\n",
       "2000-01-30   -0.192747\n",
       "                ...   \n",
       "2002-08-28    1.288991\n",
       "2002-08-29   -0.872798\n",
       "2002-08-30    0.039591\n",
       "2002-08-31   -0.207860\n",
       "2002-09-01   -0.153828\n",
       "2002-09-02    0.009099\n",
       "2002-09-03   -0.682532\n",
       "2002-09-04   -0.685373\n",
       "2002-09-05   -0.023955\n",
       "2002-09-06   -0.105387\n",
       "2002-09-07   -0.798970\n",
       "2002-09-08   -0.909196\n",
       "2002-09-09    1.315190\n",
       "2002-09-10   -0.773486\n",
       "2002-09-11   -1.457681\n",
       "2002-09-12   -0.413133\n",
       "2002-09-13    0.236890\n",
       "2002-09-14    0.853493\n",
       "2002-09-15   -1.557518\n",
       "2002-09-16   -1.389418\n",
       "2002-09-17   -0.421471\n",
       "2002-09-18   -0.909244\n",
       "2002-09-19    0.221606\n",
       "2002-09-20   -0.451388\n",
       "2002-09-21    0.749861\n",
       "2002-09-22    0.222735\n",
       "2002-09-23   -0.164852\n",
       "2002-09-24   -1.059820\n",
       "2002-09-25   -0.815364\n",
       "2002-09-26    0.239280\n",
       "Freq: D, Length: 1000, dtype: float64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000',periods=1000))\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01     0.668547\n",
       "2000-01-02     1.704331\n",
       "2000-01-03     2.168675\n",
       "2000-01-04     3.441918\n",
       "2000-01-05     3.205615\n",
       "2000-01-06     2.846194\n",
       "2000-01-07     5.593324\n",
       "2000-01-08     5.196116\n",
       "2000-01-09     4.614220\n",
       "2000-01-10     6.047702\n",
       "2000-01-11     6.221479\n",
       "2000-01-12     5.529532\n",
       "2000-01-13     4.886349\n",
       "2000-01-14     4.301244\n",
       "2000-01-15     4.653124\n",
       "2000-01-16     3.828288\n",
       "2000-01-17     4.634112\n",
       "2000-01-18     6.235084\n",
       "2000-01-19     5.230849\n",
       "2000-01-20     6.527183\n",
       "2000-01-21     5.884367\n",
       "2000-01-22     5.257865\n",
       "2000-01-23     5.139011\n",
       "2000-01-24     5.008470\n",
       "2000-01-25     4.481473\n",
       "2000-01-26     4.120898\n",
       "2000-01-27     4.210053\n",
       "2000-01-28     3.049221\n",
       "2000-01-29     2.848856\n",
       "2000-01-30     2.656109\n",
       "                ...    \n",
       "2002-08-28   -11.286585\n",
       "2002-08-29   -12.159383\n",
       "2002-08-30   -12.119792\n",
       "2002-08-31   -12.327652\n",
       "2002-09-01   -12.481481\n",
       "2002-09-02   -12.472382\n",
       "2002-09-03   -13.154913\n",
       "2002-09-04   -13.840286\n",
       "2002-09-05   -13.864241\n",
       "2002-09-06   -13.969628\n",
       "2002-09-07   -14.768598\n",
       "2002-09-08   -15.677794\n",
       "2002-09-09   -14.362604\n",
       "2002-09-10   -15.136090\n",
       "2002-09-11   -16.593771\n",
       "2002-09-12   -17.006903\n",
       "2002-09-13   -16.770013\n",
       "2002-09-14   -15.916521\n",
       "2002-09-15   -17.474039\n",
       "2002-09-16   -18.863457\n",
       "2002-09-17   -19.284927\n",
       "2002-09-18   -20.194172\n",
       "2002-09-19   -19.972566\n",
       "2002-09-20   -20.423954\n",
       "2002-09-21   -19.674093\n",
       "2002-09-22   -19.451358\n",
       "2002-09-23   -19.616210\n",
       "2002-09-24   -20.676030\n",
       "2002-09-25   -21.491394\n",
       "2002-09-26   -21.252113\n",
       "Freq: D, Length: 1000, dtype: float64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = s.cumsum()\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Rolling [window=60,center=False,axis=0]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r = s.rolling(window=60)\n",
    "r"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我目前比较关注pandas中跟时序相关的内容，在文档中看到了这样的一段描述：\n",
    ">Warning: The freq and how arguments were in the API prior to 0.18.0 changes. These are deprecated in the\n",
    "new API. You can simply resample the input prior to creating a window function.\n",
    "For example, instead of s.rolling(window=5,freq='D').max() to get the max value on a rolling 5 Day\n",
    "window, one could use s.resample('D').max().rolling(window=5).max(), which first resamples\n",
    "the data to daily data, then provides a rolling 5 day window.\n",
    "\n",
    "这段话的意思是：从pandas0.18.0版本开始，rolling方法中移除了`freq`和`how`参数，在新版本的API中，它们是不建议使用的；在新版本中如果要实现和原来版本相同的功能，可以通过如下的方式得到：\n",
    "\n",
    "旧版本写法:`s.rolling(window=5,freq='D').max() `\n",
    "\n",
    "新版本写法：`s.resample('D').max().rolling(window=5).max()`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01           NaN\n",
       "2000-01-02           NaN\n",
       "2000-01-03           NaN\n",
       "2000-01-04           NaN\n",
       "2000-01-05           NaN\n",
       "2000-01-06           NaN\n",
       "2000-01-07           NaN\n",
       "2000-01-08           NaN\n",
       "2000-01-09           NaN\n",
       "2000-01-10           NaN\n",
       "2000-01-11           NaN\n",
       "2000-01-12           NaN\n",
       "2000-01-13           NaN\n",
       "2000-01-14           NaN\n",
       "2000-01-15           NaN\n",
       "2000-01-16           NaN\n",
       "2000-01-17           NaN\n",
       "2000-01-18           NaN\n",
       "2000-01-19           NaN\n",
       "2000-01-20           NaN\n",
       "2000-01-21           NaN\n",
       "2000-01-22           NaN\n",
       "2000-01-23           NaN\n",
       "2000-01-24           NaN\n",
       "2000-01-25           NaN\n",
       "2000-01-26           NaN\n",
       "2000-01-27           NaN\n",
       "2000-01-28           NaN\n",
       "2000-01-29           NaN\n",
       "2000-01-30           NaN\n",
       "                 ...    \n",
       "2002-08-28   -158.858218\n",
       "2002-08-29   -174.954974\n",
       "2002-08-30   -191.013186\n",
       "2002-08-31   -207.025348\n",
       "2002-09-01   -223.005269\n",
       "2002-09-02   -238.988094\n",
       "2002-09-03   -255.002365\n",
       "2002-09-04   -271.042340\n",
       "2002-09-05   -287.075834\n",
       "2002-09-06   -303.068784\n",
       "2002-09-07   -319.058704\n",
       "2002-09-08   -335.057885\n",
       "2002-09-09   -351.089277\n",
       "2002-09-10   -367.131257\n",
       "2002-09-11   -383.210373\n",
       "2002-09-12   -399.319487\n",
       "2002-09-13   -415.456158\n",
       "2002-09-14   -431.584909\n",
       "2002-09-15   -447.710714\n",
       "2002-09-16   -463.854097\n",
       "2002-09-17   -480.029001\n",
       "2002-09-18   -496.245891\n",
       "2002-09-19   -512.541577\n",
       "2002-09-20   -528.894324\n",
       "2002-09-21   -545.276227\n",
       "2002-09-22   -561.684435\n",
       "2002-09-23   -578.124500\n",
       "2002-09-24   -594.619430\n",
       "2002-09-25   -611.148682\n",
       "2002-09-26   -627.724597\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " r.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.tseries.index.DatetimeIndex"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(s.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xf407518>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhkAAAF0CAYAAACOmCuSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xl4FfX5/vH3wxaQmoBYFlEsiiJIEYLgCmJBkNUFNQYR\niihuWIyKewuiolgBF0SoCyhKLAVcymJYVBC0oIHaKqhoccMSQDBAQMDk8/vjHL6/Y0pCCGfO55yT\n+3Vdc0lmnpm55zhJnsxqzjlEREREoq2S7wAiIiKSnNRkiIiISCDUZIiIiEgg1GSIiIhIINRkiIiI\nSCDUZIiIiEgg1GSIiIhIINRkiIiISCDUZIiIiEgg1GSIiIhIIAJtMszsLjNbYWbbzCzPzF41sxP3\nUzfSzL43s51mtsDMmhSbnmJmT5nZZjPbbmYzzKxusZraZvaymeWb2VYze9bMaga5fSIiIlKyoI9k\ntAeeBE4DOgNVgflmVmNfgZndAQwBBgPtgAIgx8yqRSznMaAH0AfoABwFzCy2rmlAM6BTuLYDMCn6\nmyQiIiJlYbF8QZqZHQlsBDo455aGx30P/Nk5Ny78dSqQBwxwzk0Pf70JuNw592q4pimwBjjdObfC\nzJoBnwBtnHOrwjVdgTnA0c65DTHbSBEREQFif01GLcABWwDMrDFQH1i0r8A5tw1YDpwRHnUqUKVY\nzWfANxE1pwNb9zUYYQvD6zotiA0RERGR0lWJ1YrMzAid9ljqnFsdHl2fUCOQV6w8LzwNoB6wJ9x8\nlFRTn9ARkv/jnCs0sy0RNcXz1AG6Al8BPx3s9oiIiFRg1YHfADnOuR9KKopZkwFMAJoDZ8VwnaXp\nCrzsO4SIiEgCu4LQNZH7FZMmw8zGA92B9s65/0ZM2gAYoaMVkUcz6gGrImqqmVlqsaMZ9cLT9tUU\nv9ukMnBERE1xXwG89NJLNGvW7KC2Jysri3Hjxh3UPJovvtZZEbJqvujO52OdFSFreebT5+J/nWvW\nrKFfv34Q/l1aksCbjHCDcQFwjnPum8hpzrl1ZraB0B0h/wrXpxK6juKpcFku8HO4JvLCz0bA++Ga\n94FaZtY64rqMToQamOUlRPsJoFmzZqSnpx/UNqWlpR30PJovvtZZEbJqvujO52OdFSFreebT5xJX\n6yz1coNAmwwzmwBkAr2BAjOrF56U75zbF+wx4F4z+4JQR3Q/8B3wOoQuBDWz54CxZrYV2A48ASxz\nzq0I13xqZjnAM2Z2PVCN0K2z2UHcWZKZman5ojifj3UmUtbySpTPNFHm87HORMpaXuVZXyJ9LhX9\n/32gt7CaWRGhCzuLG+icezGibgSh52TUAt4FbnTOfRExPQV4lFDDkgK8Ga7ZGFFTCxgP9AKKgBnA\nUOfczhKypQO5ubm55e4WRWKhd+/evPHGG75jiJRK+2nFsnLlStq0aQOhR0esLKku0CMZzrky3SLr\nnBsBjChl+m7gpvBQUs2PQL+DSygiIiJB0btLROJcrA9fi5SH9lPZHzUZInFOP7wlEWg/lf1RkyEi\nIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIi\nIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIi\ngVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKB\nUJMhIiIigVCTISIiIoFQkyEiIiKBUJMhIiIigVCTISIiIoFQkyEiIiKBCLTJMLP2ZvaGma03syIz\n611s+uTw+MhhbrGaFDN7ysw2m9l2M5thZnWL1dQ2s5fNLN/MtprZs2ZWM8htExGJhh9++IEnn3yS\n++67z3eUpFJUVMSYMWP4y1/+UmLN5s2bueKKK9i0aVMMk1UsQR/JqAn8E7gBcCXUzAPqAfXDQ2ax\n6Y8BPYA+QAfgKGBmsZppQDOgU7i2AzDp0OOLiARjz549DB8+nKOPPppbbrmFL774AudK+jEpB2P9\n+vV06dKF2267jW+++abEug0bNrBw4ULOPPNMPv/88xgmrDgCbTKcc2865/7knHsdsBLKdjvnNjnn\nNoaH/H0TzCwVuArIcs4tds6tAgYCZ5lZu3BNM6ArMMg596Fz7j3gJuByM6sf5PaJiJTHJ598wlln\nncVDDz1EVlYW69evZ+rUqZiV9GNSymrWrFm0bNmSNWvWsGDBAh544IESa1u0aMH7779PlSpVOP30\n01m8eHEMk1YM8XBNRkczyzOzT81sgpkdETGtDVAFWLRvhHPuM+Ab4IzwqNOBreEGZJ+FhI6cnBZs\ndBGRspsxYwaXX345LVu2JD8/n/fee49Ro0ZRt27dA88spdqxYwdXX301ffr04ZxzzuFf//oXnTt3\nPuB8xx13HO+//z6tW7ema9euvPXWWzFIW3H4bjLmAf2B3wG3A+cAc+3/t/P1gT3OuW3F5ssLT9tX\nszFyonOuENgSUSMi4t3MmTNZu3Ytjz76KB9//DGnnnpqmebTaZTSFRQU8Lvf/Y7s7GyeffZZZs6c\nSZ06dco8f61atZg7dy7nnHMOvXv3Zvny5QGmrViq+Fy5c256xJefmNm/gS+BjsDbXkKJiATkxRdf\npGrVqgc1T2FhIX379uXMM89k6NChASVLbCtWrODLL7/k3XffJT09vVzLSElJYdasWXTp0oVevXrx\n0Ucf0aBBgygnrXi8NhnFOefWmdlmoAmhJmMDUM3MUosdzagXnkb4v8XvNqkMHBFRU6KsrCzS0tJ+\nMS4zM5PMzOLXn4qIHJqDbTAAKlWqxLHHHktWVhaNGjXioosuCiBZYjv33HNZt24dqamph7ScmjVr\n8uqrrzJ06FBdHxMhOzub7OzsX4zLz88vofqXLFaH4cysCLjQOfdGKTVHA18DFzjnZocv/NwEXO6c\nezVc0xRYA5zunFthZicBnwCn7rsuw8y6AHOBo51z+200zCwdyM3NzS135ysiEgtFRUVcfvnlzJkz\nhyVLltCmTRvfkaSCW7ly5b79sI1zbmVJdUE/J6OmmZ1iZq3Co44Lf31MeNojZnaamR1rZp2A14DP\ngRyA8NGL54CxZtbRzNoAzwPLnHMrwjWfhuufMbO2ZnYW8CSQXVKDISIShJycHP71r39FfbmVKlVi\n8uTJtGjRgnPPPZc33ijxbzWRuBL0hZ+nAquAXEJ3e4wBVgL3AYVAS+B14DPgGeADoINzbm/EMrKA\n2cAM4B3ge0LPzIjUF/iU0F0ls4ElwLVBbJCIyP6sW7eOjIwMHnnkkUCWX7NmTRYuXMjvfvc7Lrjg\nAoYMGcLevXsPPKOIR4Fek+GcW0zpjcz5ZVjGbkLPvbiplJofgX4HHVBEJAr27NnD5ZdfzhFHHMH4\n8eMDW8/hhx/Oq6++ysSJExk6dCjbt2/nhRdeOKhlfPTRR0yaNImnnnoq8OsOCgsL2b59O7Vq1YrK\nsr766iuOP/74KCSTWPF9C6uISMK76667WLVqFX/961+j8gu1NGbG9ddfz/z587nnnnvKPN/OnTsZ\nMmQIrVu3Zs6cOezatavU+gEDBtCjRw/uuecepk+fzueff05RUVGZ1rV161YyMjKoUaMGtWvX5pRT\nTmHq1KnlOvKyc+dO3nrrLS655BLOOussCgoKDnoZ4o+aDBGRctq7dy833ngjY8eO5ZFHHqFt27Yx\nW3fHjh058cQTD1i3a9cuHn/8cY4//niee+45xo0bxxdffMFhhx1W6nwtWrQA4IUXXiAjI4OmTZty\nxhln8O2335Y636effkp6ejrz58/noYce4sUXX6RRo0b079+f5s2bs3r16hLnzc/Pp0OHDpx55pmc\ncMIJ1KtXj7S0NDp16sTSpUt5+umnqVlTr6VKJHF1C6uISKLYvHkzl156KUuXLmXSpEkMHjzYd6Rf\n2LhxI88//zxPPPEEGzdupH///tx99900adKkTPMPGzaMYcOGAaFt/cc//sGNN97Iaaedxpw5c2jd\nuvV+5/viiy9IS0vj7bff5je/+Q0AV155JR999BGjRo2iYcOGJa5zz549NGrUiMqVK3P22WeTmprK\nr3/9a8466yyaN29OpUp+/i7++uuvWb58OZdddpmX9Sc051yFHIB0wOXm5joRkYM1btw4d+SRR7rF\nixf7jrJfY8aMcSkpKW7QoEFu7dq1UVnmhg0b3KmnnupOOOEEt3fv3hLrfv7556isL178+c9/dtWq\nVXObNm3yHSVu5ObmOkI3dKS7Un7Xxuw5GfFGz8kQkUOxa9cufvjhB44++mjfUfYrLy+PypUrc+SR\nR0Z1uQUFBXz77becdNJJUV1uPPvhhx9o2LAhI0eO5Pbbb/cdJy7ExXMyRESSVY0aNeK2wQCoV69e\n1BsMCN1KW5EaDIA6deqQkZHBxIkTKSws9B0noajJEBEROYAbbriBdevWkZOT4ztKQlGTISIicgDt\n2rUjPT2dCRMm+I6SUNRkiIjsx/r168nMzGTLli2+o0gcMDOuvfZa5s2bx/r1633HSRhqMkREitm2\nbRvdu3dn6dKlB3xolVQcGRkZpKSk8OKLL/qOkjD0nAwRkQhbtmyhd+/efP311yxdurTU5zpIxZKW\nlsbYsWNp2bKl7ygJQ02GiEjYd999R9euXcnLyyMnJ+f/nnopss91113nO0JCUZMhIgKsWbOGrl27\nYmYsW7aMpk2b+o4kkvB0TYaIVHi5ubmcffbZpKWl8d5776nBEIkSNRkiUuEdffTR9OjRg3fffVfX\nYIhEkU6XiEiFV69ePd0xIBIAHckQERGRQKjJEBERkUCoyRARESmH+++/n9tuu813jLimJkNERKQc\n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\n/h8EvY2ea0GP/QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xf3c6cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "s.plot(style='k--')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x116e2080>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhkAAAF0CAYAAACOmCuSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XmcTmXjx/HPZca+lSXyVCSJtBllSaQQ04wlVAZlj0KM\nIiq7lLIvY40iTcvIGkaJlISGnhKpRFLZGfsyM9fvj7n1G/NYx33Pdd8z3/frdV6ac65zzveexzPz\ndVZjrUVERETE27K4DiAiIiIZk0qGiIiI+IRKhoiIiPiESoaIiIj4hEqGiIiI+IRKhoiIiPiESoaI\niIj4hEqGiIiI+IRKhoiIiPiESoaIiIj4hE9LhjGmtzFmrTHmsDFmtzFmjjGm9HnGDTTG/G2MOW6M\n+cwYUyrV8uzGmPHGmH3GmCPGmBhjzHWpxlxrjJlljIk3xhw0xkw1xuT25ecTERGRC/P1kYxqwFig\nElALyAosNcbkPDvAGPMS0Bl4BqgIHANijTHZUmxnFBAGNAaqA8WA2an29T5QFqjpGVsdmOT9jyQi\nIiKXw6TnC9KMMYWAPUB1a+3Xnnl/A29Za0d6vs4H7AZaWms/8ny9F2hqrZ3jGXMbsBmobK1da4wp\nC/wEVLDWbvCMqQN8Ctxgrd2Vbh9SREREgPS/JuMawAIHAIwxNwNFgWVnB1hrDwNrgCqeWfcCwanG\nbAF2pBhTGTh4tmB4fO7ZVyVffBARERG5uOD02pExxpB82uNra+0mz+yiJBeB3amG7/YsAygCnPaU\njwuNKUryEZJ/WWsTjTEHUoxJnacgUAfYDpy80s8jIiKSieUASgCx1tr9FxqUbiUDiAJuB6qm4z4v\npg4wy3UIERGRANac5GsizytdSoYxZhzwKFDNWvtPikW7AEPy0YqURzOKABtSjMlmjMmX6mhGEc+y\ns2NS320SBBRIMSa17QDvvfceZcuWvaLPExkZyciRI69oHa3nX/vMDFm1nnfXc7HPzJA1Levp++J+\nn5s3b6ZFixbg+V16IT4vGZ6C0QB40Fq7I+Uya+02Y8wuku8I+cEzPh/J11GM9wyLAxI8Y1Je+HkT\nsNozZjVwjTGmfIrrMmqSXGDWXCDaSYCyZcsSEhJyRZ8pf/78V7yO1vOvfWaGrFrPu+u52GdmyJqW\n9fR98at9XvRyA5+WDGNMFBAB1AeOGWOKeBbFW2vPBhsFvGqM+Y3kRjQI2AnMg+QLQY0xbwMjjDEH\ngSPAGGCVtXatZ8zPxphYYIox5lkgG8m3zkb74s6SiIgIrefF9VzsM5CyplWgfE8DZT0X+wykrGmV\nlv0F0vcls/9v79NbWI0xSSRf2Jlaa2vtjBTj+pP8nIxrgK+ATtba31Iszw4MI7mwZAeWeMbsSTHm\nGmAcUA9IAmKArtba4xfIFgLExcXFpbktiqSH+vXrM3/+fNcxRC5Kf08zl/Xr11OhQgVIfnTE+guN\n8+mRDGvtZd0ia63tD/S/yPJTQBfPdKExh4AWV5ZQREREfEXvLhHxc+l9+FokLfT3VM5HJUPEz+mH\ntwQC/T2V81HJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9Q\nyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJ\nEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQ\nERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ9QyRARERGfUMkQERERn1DJEBEREZ/wackw\nxlQzxsw3xvxljEkyxtRPtXy6Z37KaVGqMdmNMeONMfuMMUeMMTHGmOtSjbnWGDPLGBNvjDlojJlq\njMnty88mIiIiF+frIxm5ge+B5wB7gTGLgSJAUc8UkWr5KCAMaAxUB4oBs1ONeR8oC9T0jK0OTLr6\n+CIiIpJWwb7cuLV2CbAEwBhjLjDslLV27/kWGGPyAW2AptbaLz3zWgObjTEVrbVrjTFlgTpABWvt\nBs+YLsCnxpgXrbW7vPupREQkM0hKSsIYw4V/fcml+MM1GTWMMbuNMT8bY6KMMQVSLKtAchFadnaG\ntXYLsAOo4plVGTh4tmB4fE7ykZNKvo0uIiIZxZYtWxg2bBiPPfYYxYsXJ3v27AQFBVG4cGFq1arF\n8OHD+fvvv13HDCg+PZJxGRaTfOpjG3AL8DqwyBhTxVprST59ctpaezjVers9y/D8uSflQmttojHm\nQIoxIiIB7dChQ6xevZqffvqJHTt2cOTIEbJmzUqxYsUICQmhYsWKFC2qH3lXavfu3UyfPp0ZM2aw\nefNmcubMSZUqVYiIiKB48eIEBwfzzz//sG7dOl555RVefvllnn32WQYOHEi+fPlcx/d7TkuGtfaj\n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\nAFWgQAH69u3L22+/zcaNG13Hkcvwzz//8Nxzz/H444/TtGlT13FERP5HkyZN2Lp1q9duLlDJCGDP\nPvssN998Mz179nQdRS7h7FM9s2bNSlRUlE6TiIhfeuihh7j22mu9dspEJSOAZcuWjaFDh7J48WI+\n++wz13HkIt5++20WLVrE1KlTKVSokOs4IiLnlTVrVho2bOi1u0xUMgJco0aNqFKlCn369PHqbUfi\nPdu2bSMyMpK2bdsSHh7uOo6IyEU1btyYLVu2sGnTpqvelkpGgDPG0L9/f9asWaOjGX4oKSmJVq1a\nUbBgQUaMGOE6jojIJdWqVYt8+fJ55ZSJSkYGULt2bSpVqsSAAQN0NMPPjBo1ipUrV/LOO++QL18+\n13FERC4pe/bs1K9fXyVDkhlj6Nu3L9988w3Lly93HUc8Nm3axMsvv0y3bt2oUaOG6zgiIpetcePG\nbNy4kS1btlzVdlQyMojQ0FDuvfdeBg4c6DqKAAkJCbRs2ZKbb76ZIUOGuI4jInJF6tSpQ+7cua/6\nXSYqGRmEMYZXXnmFL7/8krVr17qOk+m99dZbrF+/nnfffZecOXO6jiMickVy5sxJeHj4VZ8yUcnI\nQOrVq0epUqUYPny46yiZ2qZNm+jfvz8vvvgiFStWdB1HRCRNGjduzIYNG/j999/TvA2VjAwkKCiI\nyMhIYmJi2L59u+s4mVJCQgKtW7emZMmSDBgwwHUcEZE0Cw0NJWfOnFd1ykQlI4Np1aoV11xzDaNH\nj3YdJVMaOXIk69atY9q0aeTIkcN1HBGRNMuTJw+hoaFXdcrEackwxmw3xiSlmBKNMT1TjbnRGPOp\nMeaYMWaXMeZNY0yWVGPuMsasNMacMMb8YYzpkb6fxH/kypWLZ599lqlTp3Lo0CHXcTKV3377jT59\n+hAZGUmVKlVcxxERuWqNGzdm7dq1/Pnnn2la3/WRDAu8ChQBigLXA2PPLvSUiUVAMFAZaAm0Agam\nGJMXiAW2ASFAD6C/MaZdunwCP9S5c2dOnz7N5MmTXUfJNKy1dOnShaJFizJo0CDXcUREvCIsLIys\nWbMyZ86cNK3vumQAHLXW7rXW7vFMJ1IsqwOUAZpba3+01sYCfYBOxphgz5gWQFagrbV2s7X2I2AM\n0D09P4Q/KVq0KM2aNWP8+PEkJCS4jpMpzJkzhyVLljB69Ghy5crlOo6IiFfkz5+fWrVq8cknn6Rp\n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\n5jrOZdm+fTtly5ale/fuvPbaa67jiIhkCOvXr6dChQoAFay16y807opOl1hr91trf7nElHDpLQGw\nGrjTGJPyxRGPAPHAphRjqhtjglKN2WKtjU8xJvWVfI945osX5c+fnyFDhjB9+nS++uor13EuS48e\nPShQoAC9e/d2HUVEJNPx5XMybjTG3A0UB4KMMXd7ptyeIUtJLhMzPc/CqAMMAsZZa894xrwPnAam\nGWNuN8Y8CTwPDE+xq4lASWPMUGPMbcaY54AmwAhffbbMrH379lSuXJmOHTty+vRp13EuasWKFcTE\nxDB06FDy5MnjOo6ISKbjyws/BwLrgX5AHs9/rwcqAFhrk4BwIBH4BpgBvOMZj2fMYZKPSpQAvgPe\nAvpba99OMWY7EAbUAr4n+dbVttba1HeciBdkyZKFSZMmsWXLFoYMGeI6zgUlJCTQtWtXKleuTLNm\nzVzHERHJlK7ows8rYa1tDbS+xJg/SS4aFxuzEXjwEmNW4ikv4nt33XUXr776KoMGDaJ27dpUrVrV\ndaT/MXz4cDZu3MiaNWv04C0REUf001fS5NVXX6Vy5co0b97c756d8euvv9K/f38iIyO59957XccR\nEcm0VDIkTYKDg5k1axbx8fE0a9aMxMRE15EASExMpG3bthQrVoyBAwdeegUREfEZlQxJsxIlSvDR\nRx+xdOlSevbs6ToOAK+//jpff/01b7/9Nrly5XIdR0QkU1PJkKtSu3ZtRo0axYgRI5g8ebLTLKtW\nraJ///688sor1KhRw2kWERHx4YWfknl06tSJLVu20LFjR/LkyePkbo6dO3fyxBNPULlyZfr163fp\nFURExOdUMuSqGWMYPXo0x44d4+mnn8YYk66PZT9y5Ajh4eEEBwcTExNDcLD+WouI+AP9NBavyJIl\nC1OmTCEpKYlmzZqxd+9enn/+eZ/v9+jRozRo0IDff/+db775hqJFi156JRERSRcqGeI1QUFBTJs2\njcKFC9O1a1d27drFa6+9hjFee5/dOQ4ePEhYWBgbN27k008/5Y477vDJfkREJG1UMsSrsmTJwltv\nvUWRIkXo0aMHv/32G9OmTfP6Y72///57mjRpwsGDB/niiy/0PAwRET+ku0vEJ1588UViYmJYtGgR\nVapU4ddff/XKdhMSEhg+fDhVqlQhX758rFu3TgVDRMRPqWSIzzRu3Jg1a9Zw6tQp7rnnHsaOHUtS\n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\nRiSdBbwPuK/t/vSJx7ZZHs8yPK7N8niWMZvGtW9fl6wDTgZujIgNbXemZzy2zfJ4luFxbZbHs4xZ\nM669/LrEzMzM2terr0vMzMxseLjIMDMzsyI6W2RIukLSo5JelLRD0l2STpwi7lpJ2yW9LOk+SYtr\n+w+TdGteTfAlST+XtKAW8yZJd0iayCsPrpU0r/Q5WvcNOE+/JGlTXvVyV+lzs/4YVJ4qrdC6VtLf\n82c8KelqSZ2f2dKm1tkiA3gv8B3gVOCDpOlX75X0hskASV8ELgMuAU4BdgMbJVWnv70Z+AjwMWAF\ncBTwi9qxxoCTgJU5dgXw/eZPyXpokHl6KPBT4HtFzsT6rGSeVhdUextpoq6LgaXA5cBnga8WOStr\nX0T0ogFHkuZ+P72ybTtweeX9fOCfwMcr7/8FnFOJWZI/55T8/qT8fnklZhVpApXRts/brVutVJ7W\njnEBsKvtc3XrbhtEnlZiPg9sbfuc3cq0Lt/JqBshzYa2C0DSccAo8OvJgIh4EXgEeHfedDLpZ7zV\nmC3A05WY04DxiHi8cqz787FOLXEi1mul8tSsSYPM05HJ41j/9KLIkCTSbbqHIuKJvHmUdJHsqIXv\nyPsAFgKv5otlbzGjwPPVnRGxh3RRjGK2nwrnqVkjBpmn+ZmOy4DbGui6DaG+TMa1hvT93nva7ojZ\nNJyn1gUDyVNJbwHuAX4SEetKHsva0/k7GZK+C3wYeH9EPFvZ9RzpAaOFtT+yMO+bjJmbl9SdLqb+\nFP8c4IhKjNm0BpCnZgdtUHkq6SjSqqMPRcRnGuq+DaFOFxn5gvgocEZEPF3dFxHbSIm9shI/n/Qc\nxcN50+9JD3BWY5YAxwCb86bNwIik5ZWPX0m64B5p8nysnwaUp2YHZVB5mu9g/AZ4DPh0iXOx4dHZ\nr0skrQHOA84GdkuarLAnIuKV/Ppm4MuStgJPAdcBzwB3Q3pwSdIPgJskjQMvAbcAmyLi0RzzF0kb\ngdslXQrMJf3U68cR4f9F2rQGlaf5WEeT7rAtAuZIWpZ3bY2I3QVP0zpuUHma72A8CGwDvgAsSI+A\nQETUn/ewPmj75y0H2kg/i9ozRTu/Fnc16adXLwMbgcW1/YeRioadpIviZ8CCWswI8CNgAhgHbgfe\n2PYYuA1/G3Cert/LsVa0PQ5uw90Glaekn1fXj/E6sKftMXAr07xAmpmZmRXR6WcyzMzMbHi5yDAz\nM7MiXGSYmZlZES4yzMzMrAgXGWZmZlaEiwwzMzMrwkWGmZmZFeEiw8zMzIpwkWFmZmZFuMgwMzOz\nIlxkmJmZWRH/AfiRYHOuPiZOAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xf3c6ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "r.mean().plot(style='k')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在dataframe中使用windowfunction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<matplotlib.axes._subplots.AxesSubplot object at 0x000000000E897BA8>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x000000001091AA20>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x000000001096F320>,\n",
       "       <matplotlib.axes._subplots.AxesSubplot object at 0x00000000109BB240>],\n",
       "      dtype=object)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhkAAAFkCAYAAACNTikJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXl4VOX1xz8nO9kJgQBCFAQhbCIo4kZVqrjgbqso1mrV\n2tZW6c+6tGrdWq1WUatoW9fKUnfFVsV9X6gBESEg+2LYEkgICdnP748zgSEmAUImMyHn8zz3mZl7\nz3vf994M3DPve873iKriOI7jOI7T0kSFewCO4ziO4+yduJPhOI7jOE5IcCfDcRzHcZyQ4E6G4ziO\n4zghwZ0Mx3Ecx3FCgjsZjuM4juOEBHcyHMdxHMcJCe5kOI7jOI4TEtzJcBzHcRwnJLiT4TiO4zhO\nSAi7kyEiUSJym4gsFZEyEVksIjc0YHeriOQHbN4SkT71jseLyEMiUiAiJSLyvIh0ab0rcRzHcRwn\nmLA7GcB1wM+BXwL9gWuAa0TkijoDEbkWuAK4DBgBlAIzRCQu6Dz3AScDZwGjgO7AC61xAY7jOI7j\nfB8Jd4E0EXkVWKuqlwbtex4oU9WfBD7nA3er6sTA51RgHXChqj4b+LwBOFdVXwrY9APygJGqOrNV\nL8pxHMdxnIiYyfgUGC0ifQFE5EDgCOC1wOdeQFfgnboGqroZ+AI4LLDrYCCmns1CYGWQjeM4juM4\nrUhMuAcA3AmkAgtEpAZzfP6gqv8OHO8KKDZzEcy6wDGALKAy4Hw0ZuM4juM4TisSCU7GOcB5wLnA\nfGAocL+I5Kvq06HqVEQ6AWOA5UB5qPpxHMdxnL2QBGA/YIaqFjZmFAlOxl3AHar6XODzPBHZD7ge\neBpYCwg2WxE8m5EFzA68XwvEiUhqvdmMrMCxhhgDTGmJC3Acx3Gcdsr5wNTGDkaCk5EIJIvI08CJ\ngc/FBGYXVHWZiKwF7haRwUA68DkwEngocI5coBr4t4iMAOKBT4Bs4LNG+l0OMHnyZHJycnZrwBMm\nTGDixIm71aYttNu8GT74AB5+eALdu09kwQLYuhXi4mDYMFizBlasgJ494c9/hgEDWmace9K2tduF\no09vFxntwtFnexhrc9r5fQl/n3l5eYwfPx4Cz9LGiAQnYwZwB/A2cCGwD/AX4MUgm6+AE4DbsdmL\nSVjsxmtggaAisgg4DrgayzR5BChpIrOkHCAnJ4dhw4bt1oDT0tJ2u00kt1u/Hu69Fx56CEpLISUl\njb59h3HOOXDwwXDIIZCaarZffQWXXQY/+xk8+CBceun28zR3nHvStrXbhaNPbxcZ7cLRZ3sYa3Pa\n+X2JqD6bDDeIBCdjLbAG6Ac8C+QDDwC3BdkMBd4ELsFmMj4FjsR0MepSWPsGbG7EZjI+BsaIyIiW\nTmEdN27cXtFuzRq4+2545BGIjoYrroDf/Abef38cjTUdOhQ++ggmTDBno6AArr9+z8a5J21bu124\n+mzN/rxd5PTZlsbaXJrTX1u6L+3+b6+qYd2AecA9mIOxDpgFXBJ0vBdQCwyp1+59YGLg/bFADZBa\nz2Y5cGUj/Q4DNDc3V9sTW7eqPvOM6tixqnFxqmlpqjfdpFpYuHvnqa1VveUWVVC94Qb77ISGU045\nJdxDcJyd4t/T9kVubq5imZ/DtIlnfCTMZPQGfoE5Gn/CFD0fEJEKtewST2HdQyoqLNbiuefg+eeh\nqAgOPRT+8he46CJIS9v9c4rATTdBhw5wzTWweLEtn3Tq1PLjdxzHcdomkeBkRAEzVfXGwOc5IjII\nuBzLLgkpEyZMIK3eU3bcuHGtPmUYCkpK4E9/sod/aSn07g2//CX85CfQr1/L9PG738F++1lsxgEH\nWH+XXmrLL07LsDd8F529H/+e7r1MmzaNadOm7bCvuLh4l9pGgqz4cuBNVb0saN/lmCBXz4Di5xJg\nqKp+HWTzPjBbVSeIyDFY4GjH4NmMwLknqur9DfQ7DMjNzc1tdnBNpKIKU6aYA1BcDFddBeecA0OG\n2AxEKFi3zmIznngCDjoI/vAHOP10dzYcx3H2RmbNmsXw4cMBhqvqrMbsIkFW/BMs6BMRuU5EaoFL\ngRVgKaxYQbSPgiqwDgUOxQJAAeYGXlcHVWA9jKZTWPdKFiyAH/wALrgARo2yz3/+Mxx4YOgcDICs\nLHj8cfjsM0hMhLPPhsMOg2++CV2fjuM4TmQTCU7GRGCkiDyIVWJdCQwGHoRtFVijMUGu3wXefwKs\nBl4JnOM2zBEpBSZgmSZvAJ9oOymOVlkJt99uzsTatfD22/DMM5Cd3brjGDkSPv4YPvkEtmwxfY3b\nb4eamtYdh+M4jhN+wh6Toapfisg4tiuG1QDv6fbaJVcCfwDSAq/pWIrqA6paGUhfvRgYj5V4vxOT\nO03CdDX2embOhEsugfnzbYmkLiAznBx+OMyeDbfeauN5/32YPBm6tvswXMdxnPZD2J2MAKcBD6rq\n1SLyHpbWukMF1kA8xs2B/e9jWSmwvQLrDDVp8l8HbJYD/TGxr72Cdevgf/8zZU5VE9H68EOYPt30\nK/73P4uHiBTi4y0QdPRoOP98G9vrr9tYHcdxnL2fsDsZInIuJrZ1cAOH23366qJFMG2apZ7Onbvj\nsQ4dLJhz0iRT4IwJ+1+zYY491pRCx46FI4+E++6z8YYyRsRxHMcJP2F9LIlID+A+4IeqWhWOMURa\nCuvGjfDmm/Dll/DeezBrFiQnW6bGddfZQzoz0x7Q8fEQFQlRNbtAVpZdz4QJluL65pvwj39Aenq4\nR+Y4juM0RZtNYRWR04CX6j4GHarFYjP6A4uxmY6z2S4rXg68rKoXB6WvZgG3YKXj47Gg1j+r6p8a\n6TuiUljLy+GGG2xWYutW2Hdfi2s4/XSbAUhMDPcIW47nnjNHIyEBbrsNLr7YU10dx3HaEm0lhfVt\nrMbI9cApwOlAEbAVGKGqS7HaJn8CrgAuA47BgkBPEpE4tldgnYzVMjkLuACr5np2a15Mc/nmG0v3\nfPBBuPZayM+H5cth6lT48Y/3LgcD4Ec/sqWfH/7Q6p/07Qt33QWFheEemeM4jtOShNXJUNVSVR2l\nqn9R1f+o6itY0GcSkBwwuw9zHl7EtDOux2qSpAGnB2Ix/gWMAR4FtmCprrnAgYHS7xFJdTXceScM\nH27S359/Dn/8I3TrFu6RhZ6ePS3bJDfX9Dxuugl69LBZjVmzLLC1PtXV8N//wvHHm+OVkWGOypNP\nQllZq1+C4ziOsxPCPZPRENFYsOfGwOfnsKWUU4EvgA6YQ/EFcFjA5vlAmwlY4bR84CRMc6POJqLI\ny4MjjjBlzKuusgdre8y6GDbMnIRVq8zRePttc7p69LAy86NHw8knmyOSlWVLRyUlcMstcPXVdo6L\nLzan5frrYfXqsF6O4ziOE0RE5SOIiACFwEeqOj+wuysWozFYVdcF2QZnj2QAFaraqd75IirDRBWW\nLYOHH4a//c1qfnzyiQlYtXc6dzYn4Xe/g7feMkGvwkIr5lZebvfq6KPhlFPM+ajLTPn972HpUltq\nmjTJStePG2fxLS1Vn8VxHMdpHhHlZACTgAHAEeEeSEvyzDPwr3+ZjsWGDZCaapVLr78+/KJZkUZM\nDJx4om27Su/ecO+9NrvxxBMW3zF1Kpx1lmWzHBaRc1mRhyqsXGmv++7rKcaO4+w5EeNkBGTFTwKO\nUtU1QYfWYsslWeyol5EFzA6yiROR1Hp6GVmBY43SVArrypUrKSgoaNb1BJObC5s2wWmnwcCBJkqV\nkmJLJm2VzMxMsltbs3wnpKTAb34DP/+5ORv33msZOoceak7dGWf4g7Mhli612bVnnrFlK7C4oBNO\nsKWoI48M7/gcxwkve5LCiqqGfcPqlKwCejdyPB+YEPQ5FctA+VHQ5wrgH8CywLGvsGWWEY2ccxig\nubm52hArVqzQxMRExWI9fKu3JSYm6ooVKxq8d5FCTY3qq6+qHnOMKqgecojqnDnhHlXksGqV6pln\nqoqoduyoesUVqtOnq/7nP6pXX626//523447TnXhwnCP1nGcSCI3N7fueTBMm3i+h30mQ0QmAeOw\nwM5SEckKHCpW1fLA+/uAG0RkMZZZchtBBdJUdbOIfIDpaNyJZZY8hGltLG3OuAoKCigrK2Py5Mnk\n5OQ069r2VvLy8hg/fjwFBQURN5sRTFSUBYqOHWu1U379azjkELjySltGaQ9ZPA2hast3V14JSUkm\ninbeeTumSp98si07vfKK3at+/WDwYFveKy42LZfaWrPt0sUyfn76U4+DcRxnR8LuZACXY97Q+/X2\nX4SlpqKqd4lIIvB3TIzrI+BEVa0Msk8Dvsa0NOKxKqxHYMXT7mru4HJyciJCrMvZM44+2mJi/vQn\nuP9+237+c7jjDnvQthfWrjVtkldfhZ/8xCTeO3Zs2FbExOCOPx5eeAE++8yq/aalmbMRFWU2y5aZ\no/KXv8CZZ1qskWn0OI7T3gm7k6Gqu5RGq6o3EyiQVh8RicWWP85S1elB+58kQlNYndanTmH0//7P\nMlH+9Ccr2DZlCoyIWDWVlmPRItMVqaiAl1+2GKFdITERLrjAtsaoqICnnzZH4+CDzdm45x7LCnIc\np/0SiToZzSET09doqpCa4wBWL+X3v7dS9BkZcNRR8MgjDQuA7S387392nYmJFoi8qw7GrhIfD5dc\nAgsW2FLM559DTg7cfLMtrTiO0z7ZW5wMx9ltDjgAPvrIKsL+4hcWh7Bmzc7btSU2b7aMm5EjTbDs\ngw9gn31C1190tM14LFxoInN33AG9esFf/2p6J47jtC/CvlzSQhRgQZ5Z9fY3O4W1n0ewtQvi4mzp\n5OST7Zd4Tg7ceKM5HW25ZkxhoSmp3nuvBWredZcFesa00r/45GRzMC65xJZQrr8eJk60wngXXwwR\nHC/sOE492mQKK7AvVmtkKVAGLMJiLmLr2fUE/guUYg7DXUBUPZshwGasUNoKrHaJYGmxv2uk/yZT\nWOvScxo73p7ZW+9NQYHq5ZerRkerdumiev/9qtXV4R5V0+Tnqz73nOqECaonnqj6wx+qDh6sGhOj\nGhenOn68aiRkGi9cqHrpparJyZYye8wxqo8/buOvrd3RtqJC9auvbMvLUy0s/L5NMJWVkf93cpy9\njV1NYQ3nckl/zBG4FFP5nIBlmmwrzS4iUcBr2IzLSOBC4KfArUE2KcAMYBZQBbyKlXx/H6vE+mSI\nr6NNM2nSJKKiojjMZTHp1MlEqRYtglNPten+I46w7IlIY+5cq2bbvbu9vvSSzcpkZJgA2YMPWh2X\np5+OjFmDAw6wDJT8fBNKE7Flqu7dLUZm0CATqsvJsWsYOtS2nBz7u6Sk2Psf/MCCSn/8YxMJS021\n605MNJG7n/wE/v53+O67cF+x4zgQxuUSVZ2BOQd1LBeRv2KOxjWBfWMwZ+QYVS0A5orIjcCdInKz\nqlYD44FY4IdY+uo1gc+HAKNUdUOrXFAbZerUqfTq1YuZM2eydOlSevfuHe4hhZ1eveCf/7Rp/fHj\nrYjbddfZg61Xrx1tN22C996zh6eISZwPGWIPTzCHpaLC0mSTkmwZoS79c3cpK4M5cyxr44UXLHPj\n7383HZC6/iKdlBS48ELbvvvOAlIXLTKHKCrKtqwsc+7i4iyOY906kztfuRIKCmyrrjbp87FjTe+k\nuBi++cbuz9SpcPnllkb7i1+Y4xEbG+4rd5y9h9JSeO65XbONtJiMdLZXXwWbvZgbcDDqmAE8DAwE\n5gRsPgw4HJOASSJyNPAOtgTjNMKyZcv49NNPeemll7jsssuYMmUKN954Y7iHFTEcdpg9BK+/3uI0\nrrsO+vc3wan0dJPj/vxzqKqyB6KqvQfTnoiOtgdiQyQmmsNx0EFWabZ7d9OgWL/etjqbLVtMfn7B\nAlixwvb37g2PPWYBlm354bnPPqEJQt240VKTn3vOYkJuv90cjfPOc7Ewx9kTCgosvuuf/zTHfleI\nGCdDRPoAVwC/DdrdlYbTUuuOzQm81lf1DLbZxVvR/pgyZQoZGRmcfPLJnH322e5kNEBGhs0W3H23\nlaF/8037Rb1woWVr3HuvpYP26GFOxooV8PXXtpxRXW1LF6mp5vnXbVu22GtREXz6qZW4r8u8SE83\nBc2oKJu5SEgwx+acc2y5oH9/+4Xelp2LUJORAeefb9vcuZbZct99cOutVnjvqqtMFyU9PdwjdZy2\nw7PPwhVX2MzsZZeZwOHYsTtv1+JOhojcAVzbhIkCOar6bVCbfYDXgWdU9fGWHlNTtOfskqlTp3LW\nWWcRExPDuHHjeOSRR8jNzWW4yzV+j9RUiwU488zGbURsOaVXr93ToVA1hyImxvQmnJZj8GB46ilz\n4p591pzFMWO2H7vwQlsWa0z11Nn7qKy0Zc7oaIv38aKJTVNbC2PHTuP116fRrZvNvi5cCDNn7trv\n91DMZPwVeGInNttmHkSkO/Au8LGq/rye3VostiKYrKBjda8Npa4G2zTKxIkTG5QNnzVr1s6atmly\nc3NZsGABDz30EABHHnkk++yzD1OmTHEno5URaV/S5uEgIcGWTMaPh3nzTIjtjTdsKeymm2zp6be/\ntQBVp+2Qn2/BzR99ZEuVffpYfaLDD4e+fe3flirMn29/7xkz4MMP7dc4QNeulr4+dqwFFbuzuSNb\ntpgjPmPGOB58cBy/+tX2Y7NmzdqlZ0WLOxmqWggU7optYAbjXayg2UEiUgsMVdWvAyafAb8XkTex\nOiQl2BJJMTA/yOYOEfkQc0jWA4uBharaakslZWW2bh5K+vdvOe2GKVOm0LVrV44++uht+8455xym\nTJnCPffcg7h77+yFREXZDMbgweZ0TJxoWS+TJtnrqaeansioUfZL14lMZs82HZYXX7R4qGOOsf8b\n33vP/pZgM4O1tdsL+SUkmCNxxx3mjFRVWT2eV1+1GCcRy2g69VS49loL0G7PLFhgM7erVln22qmn\nNu88YYvJCMxgvI+VZi/FnAMFMoLM3sK0Lw4CLsAyTW4HPlHVQIgd07GKq92BHwGjgauAp0J+EUEs\nWBD6olC5uZbpsKfU1tbyzDPPcMwxx7B06fZwlhEjRnDPPffwzjvv8MMf/nDPO3KcCCcry4J6f/c7\nmDzZYmyOPdZ+4Z55ps1wjBwZ7lE6dWzZYn+vBx6wAOj77rO/UfCKd1ERzJwJixeboxgTYzFTo0Z9\n33E480xbQlu2zCo1v/ce3HknTJtmYnbtMbNf1dLMr7zS4s5mzrR4sOYSzsDP44DegS0KqA28voPV\nIQE4HhvjLKwiaynwJnCoiMQEMkpOw4S4vgOexdQ/3wVateRV//7mBIS6j5bg3XffZc2aNfz73//+\nnoqbiDBlyhR3Mpx2RUKCZaJcfDF88YVlpjz/vP0qTk21h1h6um2JibYmvXmz7a/bUlO320ZH2y/l\nysrtW0XF9sDfqCjLKOrd2/4j79zZ2sbHb9cNiYsL912JLObPt6WNdetMRfaqqxpWsE1Pt8rBxx+/\n6+eui6W66CKra/TTn5oOy1VXwS9/Cfvv32KX0ShVVfDll3adGRn2HejTp3VjRlasMFXet96yZZIH\nH7QsuD0hnDoZT4nIG8CXwKlY6uoybNaijroU1jF1O0RkPyymIziF9T1VPTPI5mjgHRFJa60lk8TE\nlpllaA0mT55MVlYWkyZNqlM/3cYLL7zASy+9xCOPPEK8RyE67YyoKPv1ethhlpUyY4bFcBQX2y/k\nTZvMSTj7bHsQFBebs1G3rVpleh21teYkxMbaa92WkWFORU2N6YQ895xphNSlPteRkGDVbEePtl/q\nrfGQi2TmzLEKwt26WZZXKO9H//7w8cc2q/XHP9prTIz9/eLjG36tywI74ggrRFgXD1KftWvhk0/s\ne1JRYc5lURG8+67FipSU7GifkQGHHmqzaSNH2jJf164t73jU1poQ4XXXWVzKa69ZJlZLEO4U1ieA\nSao6W0T2beC4p7C2MOXl5bz00kucc845nHHGGd873q1bN6ZNm8b06dP50Y9+FIYROk5kEBVl/9G2\n1H+2jaFqD5eSEnvwrFtn+iuffGIPuFtu2a50OnaszX60J774wv4GvXpZCnmnTqHvMyYGrrnGZjHe\neccCTCsqts9I1b3WbVu3wqxZtsSiCpmZ5qgOGmQOZHGxOS55eXb+xERzToqKzEE58kgLQh492uJC\nNm2Cr76ya//8c1sW2rTJ2qanmzMzapQtA23cuH2rqDCHISbGgskHDbLZn06dbMx5eTabVlNjx6Oj\nbVwPP2zO9OWX2yxRamoL3suWO5WxqymswAlAMvCXuqYtPZZdob2lsL7yyiuUlJRwaiNRPCNHjqRz\n585MmTLFnQzHaQVEti+1gDkRhx0GEyZYQPlLL8G//gVXX23r5AMG2HT+pZfu/VofTz0FP/+5xbv9\n97+tf73JybuXjl5UZMGkdduUKTbbkZRkjsGNN5pzUCdCV1VlTkn9pbGsLEu1rku3VjVl3Lw8m9X5\n6CPTfSkttdmyTp1sBiIhwZzj6mpzWu++2z6np5ujU1Pz/TFHRcEpp5ge0BFHNHxde1IgTepPl+8p\nItIJ2JmvuQyLnxiLORdRbHcyFHhKVS8SkVuAM4GVwNFYdsnLmHz4Qao6R0SeAvYB4tieXfJawCaj\nseUSERkG5Obm5jaawjp8+HAaO95WOe2003jnnXcoKCggISGhQZuLL76YqVOnsmbNGjo2kNO1t94b\nx4lkSkpsrfzFF22ZJTbWYgh+8xubnt+bqK42p+r++63GzUMPuYZMfaqqTP8lObnx5ZM1a2zpY8MG\nc0IGDzaHIzralv0qKy2osznOW1AK63BVbVzzoanqaaHcgB7AlUARcBOWPVKDzWx0D9iciDkd7wKD\nsVomm4GtBKq1Bs5RiwWG5gA/BiqB/J3071VYm4nfG8cJL2vWqN50k2rnzlbV9pRTVN99V7WmJtwj\n23NWrVL9wQ+sGvLf/tZ0BV4nfLSFKqxrgKuBq1T1VuBDbDZjiqrmB2zq/LNavr+cUjcFExX0Xhqw\ncxzH2avo2tViNVauhEcftRTMY4+1X6QnnmiZMXX6EG2Jl1+GAw+09NN33jEZa5fsaduE08kYhmlb\nICKzgJmYgxAcN3wo8A1QDnyKzVZMAeKx7BKAocB7wL5YpsrdwGNAlojsGGzhOI6zF5GQYGm3X39t\n2Ql/+INlufzoR7a+PnduuEe4a8yda1WOzzjDglznzLFXp+0TTiejN+ZU/BG4FQsEnQr8Q0TqVoi6\nAqtVdayqJqtqFtsLqHUNel2kqj9Q1URVzQYeqGfjOI6z1yJiqZPXXmtZKR9+aIF+w4bZjEdDAX/h\nZsUKkwQ/80wYMsQqHj/5JLzwQutkkDitQ4s7GSJyh4jUNrHViMgBQX3frqovq+ps4CJs6cPTGhzH\ncZrJUUdZCuQf/mBZCMOHWwBgC8f57zbV1abWOWgQ7LefSbsvWgSPPw7ffmsCUL48sncRzgJp3QPv\n8+p2qmqliCwFsgO7Ql4grb2lsDqO0z6Ii4Obb7YYjauvNr2EQYPg//4Pxo1r/WyNjz4y3Yl586z/\nm2+2OJKMjJ02dcLMnqSwhjO7JAWLtZgFbMBEsz7GlD8vCdicAFRhUuKlmNMwA9jE9uySywOfP8Sy\nTlZg0uTzd9K/Z5c0E783jtO2qK1Vfe891bFjVUG1WzfVP/9ZdePG1un73ntVo6JUR45U9f829g4i\nPrtEVUswp6A/cD2mh9ERSMcCOeH7BdIewGqefKM7FkhLZXuBtBeBY7FAUsdxnHaPCBx9tFUcnT/f\nlENvucUkzn/zG1OrDMVSSmWliYb99rc2g/Lxx22n/ILTMoTNyQiIdqUBLwG3AS9gaa1gmSLw/QJp\nV2KzGoNEpG6pp36BtLMIQ4E0x3GctkBOjpW1X7nSHvzTplnMRp8+VoF07U4XmXeNDRus3sjTT1tA\n5113mQiU074IZ4G0QhFZAGzB0lYrgQlYampdPdOwF0jLy8vbuVE7w++J47R9unSx2YwbbrBslH/9\nyz7feCOcfrrV0mjurMPMmXDOOSaL/t57cPjhLTt2p+0Q7gJpx2Ey4SWY4NY64IQgxyBsBdIyMzNJ\nTExk/PjxzWm+15OYmEhmZma4h+E4zh4SG2uFuUaPtkJckydbBsjw4Vb584QTrDhZjx6myxEXBykp\nVtK+c+ftsxNVVbYc88gjJn8+YgQ8+yzs21DpS6fdELYCaar6LTAJcwiOwIJALwH+IyIHq2p956JV\nyc7OJi8vj4KCgnAOI2LJzMwkOzt754aO47QZOnaEX/8afvEL06uYOtXqhmzY0LB9TIzNiCQnW52M\nkhIr7vbkk3DeeebAOO2bcBVIWwr8AHgDSFfV0qD23wKPqupdgQJpp6jqsKDj+wXaBxdIS2louYRd\nKJA2atSoBlNYx40bt4tX7DihZdq0af59dMJKWdmO5c5LSqzi6OrVsH69FdtavXoav//9OIYMCfdo\nnZamsRTWDz/8EHZSIK3FnYxtJxb5PXAyJvtdoaoZ9Y6PxTJB3gFGYUsm/wJOBZ5U1TtF5ATgVeB/\nWIbJ+sD70UAXVa0SkcuxomqLsTiNlcBCYH9VHdDE+Jqswuo4kcKpp57K9OnTwz0Mx2kS/562L3a1\nCmsos0tisWyPhxs5/nmg/7r01OuBXwF9gP8GbD4NvGYD5wKTseyRj4NSWD/GNDfisTTYj7AS8q+3\n4LU4juM4jrObhMzJUNVbVPV+oLESPYdg8RnfAH8HJmIprFvZrgJ6PjbDMQcrjHYJ5pwEF1G7AFgE\nFALPY8GkX2Fl30NC/Wkjb7dn7cLRZ1saa3NpK/e0rbQLR59taazNpTn9taX70t7/9uEskFaXnvpD\nVe2squnAD4EktldYHQm8r6on6/YCadcD/YIqrI4E/qs7Fki7HzgsVANvK1+2ttIuHH22pbE2l7Zy\nT9tKu3D02ZbG2lzcyWjZduHqszHCmcLaUumpjZ0nVUTiVbWikf4ToHmaD8XFxcya1egSlLdrBj5W\nbxfp7cLRZ3sYa3Pa+X0Jf59Bz86EJg2b0hyvvwF3YHoWjW01wAH12lwIbGzgXH8HXq+3r0PgPGMC\nn2cAD9e3soJ6AAAgAElEQVSzyQnY9At8XghcW8/mxMBY4pu4lvOw5RrffPPNN998861523lN+Q27\nO5OxqxVWd4U9qbCqu2CzuYlZDDAH5nxgOabR4TiO4zjOrpEA7Ic9Sxtlt5wMVS3EAixbgs+A34tI\npqrWKV4djy2BzA+yuV1EolW1JshmYZD+xWfYzEUwxwf2N0rgWqbu4TU4juM4Tnvl050ZhCzwU0R6\nisiBWLGzaBE5MLAlBUzexJyJp0VkiIiMwQqlPRiUnjoVq2nyuIgMEJFzgN8A9wR19QjQW0T+IiL9\nROSXwNnAvaG6NsdxHMdxdk4oxbieAH7SwKFjVPXDgE1PTEfjaKAUeBK4XlVrg84zCHgIW1opAB5Q\n1b/W62sUlgI7AFgN3KqqT7fwJTmO4ziOsxuEzMlwHMdxHKd9E06dDMdxHMdx9mJC6mSIyOUiMkdE\nigPbp4F6JHXHnxCR2nrba/XOES8iD4lIgYiUiMjzItKlnk1HEZkS6GOTiDwaFPvhOI7jOE4YCPVM\nxiqs7PswYDjwLvCKiARLfr+OpZx2DWz1y03ehxVaOwsrpNYdeKGezVRMP2N0wHYUpsPhOI7jOE6Y\naPWYDBEpBK5W1ScCwaFpwWXa69mmAhuAc1X1pcC+flhtk5GqOjPgsMzDKsHNDtiMwYqs9VDVtQ2d\n23Ecx3Gc0NJqMRkiEiUi5wKJ7Jhbe7SIrBORBSIySUSCS8IPx7Q83qnboaoLsXLudbVJRgKb6hyM\nAG9jgl2HhuBSHMdxHMfZBUJeuySQgvoZpg5WApwRcBTAlkpeAJZhlVXvAF4TkcPUpli6ApWqurne\nadcFjhF4XR98UFVrRGRjkI3jOI7jOK1MaxRIWwAcCKRhIln/EpFRqrpAVZ8NspsnInOBJZhuxnuh\nHJSIdALG4LLijuM4jrO7bJMVDyhoN0jInQxVrWZ7PZPZIjICuBL4RQO2y0SkAOiDORlrgTgRSa03\nm5HFjrVL6mebRAMZQTYNMQaYsvtX5DiO4zhOgPNpokRHOEq9RwHxDR0QkR5AJ2BNYFcuUI1ljQQH\nfmazvTbJZ0C6iBwUFJcxGhDgiybGsRxg8uTJ5OTkNGH2fSZMmMDEiRN3q423i6w+28NYvV3LtgtH\nn+1hrM1p5/cl/H3m5eUxfvx4CDxLGyOkToaIvA70xWYaBCt+1g04LqBj8UfMqRiLLadUYPEZMwBU\ndXMgA+UpEXkyMN6twExVnRmwWSAi7wBvi0g828vOP7uTzJJygJycHIYNG7Zb15WWlrbbbbxdZPXZ\nHsbq7Vq2XTj6bA9jbU47vy8R1WeT4QahnsmIApKAOCzosxKowWYqaoDTMCekGgvmrAaiMYekjrr3\nTeXaSgNtpBHbPWbcuPpSHt5uT9qFo8+2NNbm0lbuaVtpF44+29JYm0tz+mtL96W9/+3DrZORD9yt\nqhMDx1IxZ+NCVX02lDoZIjIMyM3NzW22t+g4rcGpp57K9OnTwz0Mx2mSpr6n1bXVzPxuJnPWzmHu\n+rmsKF7B6s2rWb15NeXV5aTEpdAvsx8DMgcwsMtABnQewMDOA+mS1AWRkP1edPaAWbNmMXz4cLBn\n76zG7FotJkNEooAfE9DJEJFeWIppsAbGZhH5AtPAeBY4mAZ0MkSkTidjJjvXyXgllNflOI7jNMym\nrZt4dNaj/G3m31i1eRUxUTH0z+xP7469ObLnkeyTug9JsUkUlRexoHABn6z6hMe/epzKmkoAOnXo\nxIDOAxjQeQAZHTJIjE0kKymLbind6Jbcje4p3emS1IXoqOgwX6nTGGHTyRCRwzBHYF29JsEaGFm4\nTobTzmnt6WvHaQ7B39NvC7/l/s/v58k5T1JdW824QeO4/ODLGdZtGHHRcU2ep7q2miUblzBvwzzm\nrZ/HvA3z+Hz152yu2ExpVSkFZQXUau02+yiJ2uZ49EztSe+OvemV3steO/YiPSGdzMTMnfbrhIaw\n6WS0Qr+7xIQJE0hLS9th37hx4/w/didi8O+i0xY4+8dn8/bSt/nbzL/x6sJX6ZzUmWsOv4bLD76c\nrOSsXT5PTFQM/TL70S+zH2fmfL/iRHVtNetL17OmZA1rtqwhvySfNSX2unLzSl5b9BrLipZtmw0B\niI2KZVCXQQzJGsKAzgPYv+P+dOzQkZio7Y/A+qEDGR0yyOmcs4NNe2XatGlMmzZth33FxcW71Dac\nOhl3YcGZWew4m5EF1C19hFInA4CJEyd6TIbjOM5uoqosLFzIW0ve4q2lb/H+8vcpqSxhQOcBPHrq\no5w3+DwSYhJavN+YqBi6p3Sne0r3Rm1qtZb8knyWFy1nc8VmlhctZ9aaWcxdP5cX8l5gS+WWXeqr\nQ0wHDup2EId0P4Sjso/iqH2PoktSl503bIOoKqs2r2LuOouZSYpNIjU+lcTYRHoe0ZObj74ZQdha\nvRWAJfOW8OGHH+70vKFOYb0eOAPoj6Wefoplm8QHhLfWAv8UkUOCmwGpgfd1OhljRORo4Bxs2SUJ\nmyGB7ToZo4CfY+mwUViWytehuzrHcZz2QXVtNbn5ucxaM4v5G+azoHAB89bPY82WNcRGxXJE9hFc\nd+R1HL//8QzvNjzswZpREkWP1B70SO3xvWOqSuHWQorLi3dYdgF2GHd+ST65+bl8ueZLXv32Ve7/\n4n4ADuh0ACN7jOTQfQ5lZI+RDO4ymNjo2AbHoapsKNvAquJVFG4tZOPWjWzcupHCskI2lG3gu5Lv\nKCovolZrt22quv0929+XVpayqXwTReVFgM3OxETFEBsdu+19XHQcqfGpZHTIoGtyV7qndKdbcjey\nkrNIiUshOS6ZlPgUSitLWVm8kpXFK1lRvIJ5G+bxzfpv2Fxhv+WjJZoarWn6Jufv2t8ipNklIrIY\nmAa8jzkOd2M1Sk5U1TdE5BrgVmAu8H/AdZhDMkJVCwLnmASMB8qAG4FfAb2BOap6VMDmNeAILDX2\nbuAmoCMwXVXHNzI2zy5xHMdphIrqCt5a+hYv5L3AqwtfpXBrITFRMfTN6EtO5xz6d+rPkdlHMmrf\nUSTFJYV7uCHnu83f8eGKD/ls9Wd8vvpzZq+dTXVtNdESTafETmQmZtI5sTNpCWkUlxfzXcl3rCpe\nRUVNxQ7niYmKoVMHs++e0p2MDhlER0UjCFEStW0L/iwiJMUmkZ6QTnpCOiJCdW01VTVVVNVWUVVT\nRXVtNZU1lWyu2Ezh1kLWblnLmi1r+G7zd9tmH+qTmZhJdlo2/TP7M7jLYAZ1GcTgLoPJTsumsqaS\nksoSyqrKKK0spbSqFEG2zU59/dXXnDfmPNhJdkmonYxHgWMxAa5iLPX0B8AoVf04YDMbcywU+Aj4\nlaouDjpHJracUorNcrwB3At8wvY01hGYuucWbObjeeBV4EUaSWN1J8NxnL0RVWXtlrXkFeRRVlVG\nfHQ8HTt0pGNCRzp26EhafNq2bAxVpUZrqK6tpqi8iBVFK1i6aSlvLn2Tlxe8TFF5Ef06WWzEKQec\nwrBuw4iPaVCwud2xtWors9fOZu66uRSUFbChbAMFZQUUlReRGp9K95TuZKdl0zO1Jz3TetI5sTMZ\nHTJIjktu1ZkeVaWsqowtlVsoqSyhpKKEhJgEstOy98g5jIgUVlW9JPiziPQBFgIbg3Z/BewLVAVe\nfysiN6hqnc3gwGuP4LiMemmsA4GNqtop6Hg0nsbqOM5eTE1tDYs3Lmb22tl8tfYrvlr7FbPXzmZ9\n6fpG2whCbHQs1bXV31suqOOATgdwxSFXcM6gcxjYeWDYlz8ikQ6xHTi85+Ec3vPwcA+lSUSEpLgk\nkuKSyGLXA3BbitbUyRDgPuBjVZ0fdMjLvTuO4zRBdW01iwoXsXTTUlYWr2R50XK+XPMlM7+buS2I\nMTstm6Fdh3L58MsZ2nUoA7sMJDU+lfLqcjZt3cSm8k3bXitrKomJiiFaou01KpqUuBT2S9+PfdP3\nJT0hPcxX7OwttGZuziRgABY7sY1wlnt3HMeJJLZWbWVBwQIWb1zM0k1LWVC4gK/Xfc289fO2re1H\nSzQ9UntwULeDuOGoGzi4+8EM7TqUTomdGj3vfun7tdIVOM6OtIqTISIPAicBR6nqmqZsW7ncu+tk\nOI7T6qzdspa56+bybeG3LCtaxrKiZXyz/hsWb1y8bQkjLT6Nvp36clDXg7jwwAsZ3GUwB3Q6gK7J\nXV3h0mlV9kQnI+S1SwIOxmnAD1R16S7Y9wBWAKep6n92sX5Jf6x+ycFB9UuOB17DAz8dxwkjZVVl\nLN64mG8Lv+XTVZ/y5pI3mbdhHmBpiPum78t+6fsxIHMAg7Mswr9fp3507NAxzCN3nMaJiMBPEfkc\nqz9SAXwhIv8DbgNmq2p5BJR7dxzHaVE2V2xmxuIZTP92Oh8s/4BVm1dtO9YjtQfH9T6OPxz1B0bs\nM4L90vfzWQlnrybUyyWHYhkeCYHtxMB2CfAYbbjcu+M4DlhQ5merPuO95e/x8cqPeX/5+1TVVjEk\nawjnDjqXgZ0H0rdTXw7odACdOnTyTA2nXRHqFNYd/jUFNC/WY2msBGYzUoD/a6Dc++lAXbn3n9LA\ncomIjAgq9z6aBsq9i8gEn81wHKclyS/JZ8biGbyx5A3eXPImReVFdEzoyMgeI7nn+Hs4pd8pHmzp\nOLRudglAOjYbsRHAy707jtNWmL9hPi/mvciLeS8ye+1sBOHg7gdz1aFXcWLfEzm4+8FESVS4h+ns\nBitXrqSgoCDcw4hIMjMzyc7O3uPzhFsnoyte7t1xnAhl7Za1PD//eR6b/Rhfrf2K5LhkTu57Mr87\n/Hcct/9xZCZmhnuITjNZuXIlOTk5lJWVhXsoEUliYiJ5eXl77GiEXScj3HgKq+M4dagqeQV5vLLg\nFaZ/O50vVn9BdFQ0Yw8Yyy1H38Lx+x8fksqiTutTUFBAWVkZkydPJicnJ9zDiSjy8vIYP348BQUF\nZGdnR3apd2hSJ2MtYS737qXeHSe8lFWVsXTTUkorSymrKqOyppKq2irWbVlnolRFS1lRtIKNW63S\nQIfYDmQmZtrWIXP7+3pbp8ROdIjpsNNAy6LyIj5d9SnvLH2HVxa+wpJNS0iKTWJMnzE8efqTnNT3\nJJ+x2IvJycnxZ8BOaOiHd1AKa5OEOoX1KOBfQE+s/PpQYGWQyU2Yk/FV0H8Eb2NxFA8FPs8NvK4O\nLLnMAO4BsrEy72AaGR1FpATLTnkBi8MQrHCa4zgRQGFZIXPWzWHO2jnMWTeH2WtnM2/9vAbLSgtC\ndlo2vTv2JqdzDpkdMhERyqrKKCgroKCsgIUFC7e9r1/tEiA+Op5OiZ3onNiZbind6JrclS6JXSjc\nWsiijYtYvHEx+SVWs7p7SndOOeAUHuj3AMf2OtZnLBynBQj1TMY1WEzEjcDtQJqIZAHFqloesFmA\nzUr8BlgF/A5YzfZgzduwCqylgfP8GqvE+kmdTgZwC1ACfAf8FbgZ+BEwzTNLHKf1KKkoIb8kn+9K\nvmPxxsUsKlzE6pLVbCjdwIKCBXxX8h0ACTEJDO4ymBHdR/DLg3/JoC6DSIlPoUNMB+Jj4omNiiWj\nQ8YuV/xUVUqrSrc5HAVlBWzcupHCskIKtxayvnQ9a7esZUHBAj7Y8gGdEjvRJ6MPo7JHcUCnAzis\n52Hs33F/Ty91nBYm1E7GyVhg5+3YTMaTgf0XYTMcYMqdzwB3YdknHwEnqmplIH31YmA8MAq4E9Pb\nSAqck0D66hishPzPgYmBvpKwmRLHcXaTWq1l3ZZ1LCtaxvKi5azbso6t1Vupqa2hRmuo1VpKK0tZ\ns2UN+SX55Jfks2bLmm3FugCiJIpe6b22lbm+YMgFHNj1QIZ2HUrfjL4tKkIlIiTHJZMcl+ypo44T\nQYRaJ2NbPpeI1AJnqOr0emZHY8Ggm4CXgeAy78MDY5yhqs9hsxiIyHKgP7Z0Upe++hHmoNTFY5QD\nQzD1UMdxgiivLmfe+nl8s/4blm5aytKipSzdZLEPW6u3sqVyC5U1ldvsk2KTSIxNJCYqhiiJIkqi\nSIhJoHtKd7qndOfg7gfTPaU73ZK7bdu3b/q+xEXHhfEqHccJN62tk1EfL/PuOK3EyuKVvLLgFV5Z\n+AofrPiA6tpqALold2P/jP3pk9GH0b1GkxSbRFJcEtlp2fRK78V+6fuREp8S5tE7jtMWCauT4WXe\nHSe0lFaW8uRXT/LY7MeYvXY2sVGxHNvrWCaOmciIfUYwsPNAkuKSwj1Mx3FamKeeeoqLLrpoh32d\nO3dm4MCBXHPNNZxwwgmtMo5wz2TsQGuXeQfXyXD2Pmq1ljlr5/BC3gs8/OXDFJcXc3r/07n2iGs5\noc8JpCWk7fwkjuO0eUSE2267jf322w9VZd26dTz55JOcdNJJ/Oc//+Gkk07apfNEvE7GrhIo894J\nqNPSyMVSUkcDwXVLgtNXPwPSReSgIFnx0exi+qrrZDh7A6s3r+atJW/x1tK3eHvp22wo20ByXDKX\nHHQJV4680oMhHaedcsIJJ+zwjLv44ovJyspi2rRpu+xkRLJOxnHAHzClTwFOEZEVWO2SjXiZd8dp\nFlsqt/DB8g94c8mbvLX0LfIK8hCE4d2Hc+mwSzlu/+M4rMdhu5wC6jhO+yA9PZ0OHToQE9M6cwyh\n7mUollpaG/h8cWB7CvglXubdcXaJmtoaZq2Ztc2p+HTVp1TVVpGdls3xvY/nlqNv4dhex9IpsVO4\nh+o4TgRRXFxMYWEhqsr69et54IEHKC0t5YILLmiV/kOdwno3cDc0nMLqZd6dtoaqsrV6K5srNlNc\nXkxVbdW2YzW1NVTUVFBeXU5FdQUbt24kvySfdaXrqKypRFVJiU8hOy2bnqk96ZnWk+y0bJLjknfo\no05me8nGJSzZtITPV3/O20vfZlP5JlLiUjim1zFMHDOR4/Y/jr4ZfV1AynGcBlFVRo8evcO+hIQE\nHn/8cY499thWGUPYYjK8zHv7QVWpqKmgqqaKqtoqoiSKlLiUFhVjaknKq8v5et3X5ObnkleQR15B\nHss2LaOovIjiiuJtqZ+7QmJsIl2TuxIfHY+IUFxeTH5JPho0MZeekE52WjYxUTGs3bJ2m8w1mD7F\nkKwh/HrErzl+/+MZsc8IYqNjW/R6HcfZOWVVZSwoWBDSPvpn9icxNrHFziciTJo0ib59+wKwbt06\nJk+ezM9+9jNSUlI4/fTTW6yvxghn4KeXed8LKKsqY0XRCvIK8pizdg4LCxdSuLWQwrJCk3XeWriD\nCmQwSbFJO8QMdIjpQHJcMrHRsVRUV1BZU0llTSXJcclkJWfRNbkr+6TsQ4/UHuyTsg8ZHTJIT0in\nY4eOdEzoSHpC+i49gGu1li2VW9hcsZl1W9axdNNSlhctZ9HGRXyZ/yVz18+luraamKgY+mb0Jadz\nDmfmnEnHhI6kJaSRFp9GanwqaQlpxEdvH3+URBEfE098dDzxMfF0TOhIanzq92YaqmqqyC/JZ2Xx\nSlZtXsWq4lWsLF5JjdaQlZRF74696ZPRh/0z9icrKctnKhwnAlhQsIDh/9h5oOOekHtZLsO6tWwi\nwiGHHLJD4Oe5557LQQcdxBVXXMHYsWNDHpsRUdklTmRSVlW2zWlYsmkJc9fNZe76ucxZN4clG5ds\n+1XeJakLAzoPoHNiZ/p07ENGhww6JXYiJS6FDrEdiI2KJTY6llqtpaSihOKK4m3LCLVaS3l1OVsq\nt1BVW7XtQR0bFUtJZQnrStexdsta5q2fx6rNqxp1XFLiUkhLSCM2KpaYqBgUpaK6YodljIYKaaXE\npdC7Y2+GdRvGpcMu5eDuBzMka0hIAidjo2PZN31f9k3ft8XP7ThOaOif2Z/cy3JD3keoERGOOeYY\nHnjgARYtWhTyMvfhdDLCXuYdXCejPqrKV2u/4j/f/ocPV37IgoIFrN68egebzMRMhmQNYWzfsQzO\nGkyfjD4c0OkAuia33sRRSUUJm8o3sWnrJorKi7a937h1I5srNlNVW0V1bTWqSkJMwrYtPiaeDjEd\nSIlPITU+lczETPbvuD8dO3RstbE7jtP2SIxNbPFZhnBRXW1Lvlu2NPxjrT5tUicjILy1Fgva/Bq2\nBX4Gl3l3nYxWQFXJXZPLM988wzPznmHV5lXbAgx/MuQn9MvsR1ZSFh07dCQ7LTsipvBT4lO2BVE6\njuM4u0Z1dTUzZswgLi5ul2cxIlknIwlT76x7IvUWkQOBjaq6CrgP+JOI3FPXJPB6C/BcIBD0MeBx\nEfknVlm1Asitp5PxFjBDROKAWCxl9kXPLGmcqpoqPl/9Oa8teo3n5j/Hkk1L6JzYmbMHnM1ZOWdx\n1L5HeXErx3GcNoyq8tprr5GXlwfA+vXrmTJlCkuWLOH6668nOTl5J2fYc0I9k3EwJg+uga3OmXgK\nuFhV7xKRE4EjgSps5uFaYHHQOVYDHTDnohYoBTqLSJyq1pWJ/C5wDoAaTLBrn1BdVFulqqaKGUtm\nMHXuVF5b9BrFFcVkJmZyWr/TePjkhzmm1zHERHmYjuM4zt6AiPDHP/5x2+eEhAT69+/PI488wqWX\nXtoqYwi1TsYHQNROzN4H0lS1sTWLK4Drd6KlMZ4mtDT2/EraNhu3buTRWY/ywBcP8F3JdwzqMojf\nHvZbTuxzIsO6DYvYVFLHcRyneVx44YVceOGF4R5GxGSX9BWR74ByLMbielVd1YJaGu0OVeWDFR/w\nz1n/5IX5L1CrtZw/5HyuPPRKhnYdGu7hOY7jOO2ASHAyPsdUPRcC3YCbgQ9FZBAtp6XRbli3ZR1P\nzXmKR2c9yqKNi+ib0Zdbj7mVCw+8kKzkrHAPz3Ecx2lHhN3JUNUZQR+/EZGZwArgx0Bo5dXYO1JY\nC8oKeCnvJZ6d/yzvLXuPmKgYzh5wNv885Z+M2ndU2DNBHMdxnLZLm0xhbQxVLRaRb7GslPdpGS2N\nRmmrKaxVNVW8sfgNnvjqCf7z7X+o0RqO3u9oHjzpQX488MdkdMgI9xAdx3GcvYCITWFtDiKSjDkY\nT+2uloaIdAeuxpZd4oGiVh5+yJm3fh5PfPUEk7+ezLrSdQztOpS/Hv9Xzh10Ll2Suuz8BI7jOI7T\nSoTdyRCRu4FXsSWSfTCNjCrg3wGT+4AbRGQxsBy4DUtrfQW2BYI+BvwdSAduxzJPugETReS/qlrQ\nahcUAlYVr+LlBS/z9NdP87/8/5GZmMn5g8/np0N/6kGcjuM4TsQSdicD6AFMBToBG4CPgZGqWggQ\n0NJIZLsT8RFwYpBGBsAE4ExMI+N3wBvACcAs4GLgrta5lJZBVZm/YT4vL3iZlxe+zJf5XxITFcMJ\nfU7ghR+/wNgDxrpQluM4jhPxhN3JUNWdRliq6s1Y1klj1GJOylmqOr1up4i8jaWxRjy1Wsvnqz/n\n5QUv89KCl1i8cTHJccmc1Pckfjvyt5zY90TSE9LDPUzHcRzH2WXC7mS0EJlANA2nuvZr/eHsnK1V\nW1lYuJB56+fxwYoPmL5wOutK19ElqQun9TuN+0+4n9G9RoekCqjjOI5j1EluO9tpyXuytzgZEc3M\n72aSm5/L6s2rmbdhHvM2zGPppqXUai0AfTP6csGQCzi9/+mM7DHSFTgdx3FCTGZmJomJiYwfPz7c\nQ4lIEhMTyczM3OPz7C1ORgEWj1FfbWqnaaytoZPx7Lxnue/z+8hKzmJg54GM7TuWgV0GMrDzQAZ0\nHkBaQtrOT+I4juO0GNnZ2eTl5VFQ0KbzAkJGZmYm2dlW5XpPdDJEVVt8cOFARD4HvlDVKwOfBVgJ\nPKCqdzdgPwzIzc3NDblORnVtNdES7aJYTrOYNm1amxKHc9on/j1tXwTpZAxX1VmN2e2seFlIEZHl\nIlIbtNWIyDX1bHqKyH9FpFRE1orIXSISVc9mCJAK/EZECkTkLuARIBF4srWupzFiomLcwXCaTf1f\nEI4Tifj31GmIcC+XKHAD8E9M2ROgpO5gwJl4DcgHRgLdgaeBykA7RCQFmAG8CTwPXI6lsS4Fxqjq\nhta4EMdxHMdxdiSsMxkBtqjqBlVdH9i2Bh0bA/QHzlfVuYE6JzcCvxKROgdpPBAL/ExVb1LVLsCd\nQIWqfhmKATfXY/d2kdNnWxprc2kr97SttAtHn21prM2lOf21pfvS3v/2keBkXBdY4pglIleLSHBq\nxUhgbj3FzhlAGjAwyOZDVa2uZ9NPREISUdlWvmxtpV04+mxLY20ubeWetpV24eizLY21ubiT0bLt\nwtVnY4R7ueR+TJVzI3A4NgPRFas/QuB9Q9oXdcfmBF6XNmHTWAhsAjQvH7i4uJhZsxqNc/F2zcDH\n6u0ivV04+mwPY21OO78v4e8z6NmZ0KShqrboBtyBKXA2ttUABzTS9qdABRAb+Px34PV6Nh0C5xkT\n+DwDeLieTU6gn35NjPM8LCbEN998880333xr3nZeUz5BKGYy/go8sROb+jMPdczEZlf2AxZhGheH\n1LOp08JYG/TakD5GsE1DzADOx4qule9kvI7jOI7jbCcBe1bPaMqoxZ2MQGGzwmY2PwibpVgf+PwZ\n8HsRyQyKyzgeWwKZH2Rzu4hEq2pNkM1CVW1ULSQwzqnNHKfjOI7jtHc+3ZlB2MS4RGQkcCjwHpa2\nejhwL/BfVb04YBMFzMZSWK/Fyrf/C/iHqt4YsEkFFgBvAX8BBgOPAVeq6mOteU2O4ziO42wnnE7G\nQcAkrIBZPLAMcyAmqmpVkF1P4GHgaKAUE9e6XjVQ+MNsBgEPYUsrBZjK519b5UIcx3Ecx2mQvUZW\n3HEcx3GcyCISdDIcx3Ecx9kLCamTISKXi8gcESkObJ+KyAn1bG4VkXwRKRORt0SkT73j8SLyUECw\nq0REnheRLvVsOorIlEAfm0TkURFJCuW1OY7jOI7TNKGeyViFBWwOA4YD7wKviEgOgIhcC1wBXAaM\nwGIuZohIXNA57gNOBs4CRmH1S16o189UTBtjdMB2FKax4TiO4zhOmGj1mAwRKQSuVtUnRCQfuFtV\nJ6q4WYQAACAASURBVAaOpWJqnReq6rOBzxuAc1X1pYBNPyAPGKmqMwMOyzys3OzsgM0Y4L9AD1Vt\nSivDcRzHcZwQ0WoxGSISJSLnYuXXPxWRXpjs9zt1Nqq6GfgCOCyw62BMyyPYZiGwMshmJLCpzsEI\n8DamRHZoaK7GcRzHcZydEfLaJYH00s8wdbAS4AxVXSgih2GOQEO1SboG3mcBlQHnozGbrmwX7wJA\nVWtEZGOQjeM4juM4rUxrFEhbAByIVU49G/iXiIxqhX6bREQ6YaXkl+Oy4o7jOI6zO2yTFQ8oaDdI\nyJ2MQAn2ulols0VkBHAlcBcg2GxF8GxGFqbyCVZ7JE5EUuvNZmSxY+2S+tkm0UAGTdcuGQNM2e0L\nchzHcRynjvNpokRHOEq9RwHxqrpMRNZiGSFfw7bAz0Mx9U6AXKA6YBMc+JmNLcEQeE0XkYOC4jJG\nYw7MF02MYznA5MmTycnJ2a0LmDBhAhMnTtytNt4usvpsD2P1di3bLhx9toexNqed35fw95mXl8f4\n8eMh8CxtjJA6GSLyZ+B1LFAzBfN4foAVMANLT71BRBZjA70NWA28AhYIKiKPAfeKyCYspuMB4BNV\nnRmwWSAiM4B/isgvgDjgb8C0nWSWlAPk5OQwbNiw3bqutLS03W7j7SKrz/YwVm/Xsu3C0Wd7GOsu\ntauogPnzYd48yM8nLT+fYe+8A0OHwhFHQGJiZIwzAtqFoc8mww1CPZNxHPBbrDZJLVZX5GJVfRdA\nVe8SkXHA9KA2CrwMnBT4PCGw7/XAeWqAN0Ski6rWBXyeB/wD+ASIBSqxDJYkVS1t6YsaN26ct2vB\nduHosy2Ntbm0lXvaVtqFo8+2NNbm0mh/VVXw+uvwj3/AjBlQXW3709IYFxsLt94KW7ZAbCwcdhiM\nHg3HHQcjR4LI7vfX3HFGWLtw9dkYIdXJEJHXgGnAl5hDcwcwCMhR1a0BmyewmIqfYkscABXBZdpF\n5GHgROBCYDO2nFKjqkcF2byOxWpchs1mPAnMVNXxjYxtGJCbm5vbbG/RcVqDU089lenTp+/c0HHC\nyB5/Tysq4Msv4cMPYeZM+PRTWL8ehg+HCy6AQw6BwYMhJcXsVSEvD959F955B95/H4qKYMgQuOUW\nOO20Jp0NZ8+YNWsWw4cPB9OomtWYXUhnMlT1pODPIvJTLN10OPBx0KEKVd3Q0DkCcRoXY4JcHwT2\nXQTkiciIIEGuMewoyPVr4L8icrULcjmO40QIpaWQmwtLlsDy5bBsGSxdavvKy82JGDECLroIzj3X\nlkQaQgQGDLDtiiugpsYcjTvvhDPOgBNOgAcegL59W/Pq/p+98w6Pqsz++OdkUiadFJJAIIQiTQQB\nUSxr73Xti72sq66ubV3b2svP3nvvsqu7rmtd7L0HRZQoUkMNECCFhNTz++PcgSEmlDCTmUnez/Pc\nZzL3vvfe9955M/fMec/5HkcrOjvwswc29bG81fpdRaQcWIFJj1+uqoE2Y2lDkEtEAoJcX7NhQa7/\nhuFaHI5OobPd1w5HR2h3nM6bZ16Jzz6zZcoUMwgAevWC4mLo3x8OOwx22QVGjYL4DjyafD6bMtl9\nd3j1VTj3XBgxAi66CC69dJPiNmIWVTPePvkEvvvOYljKyyEuDnJzzSAbMcKWkSMhIyPsXeo0I0NE\nBAv0/FRVpwVtegurRTIbGIhNqbwpIturzeUUECFBrrKyMpYtW9bR3bs8ubm5FBUVRbobXR5nZDhi\ngQkTJljcxJQp8OWXZlB8+qkZGQADB1qQ5p/+ZDEUW2wBycmh74iITZXstZd5NW6+GZ55xgyNE08M\nzzkjTX09TJwId91l918EhgwxY2LLLa3N4sXwwQfw0ENm5InY9NNBB8Hvf2/TUmGYXupMT8YDwHBg\nx+CVqvpi0NufRGQqMBPYFfgg3J06//zzyczMXGfdhAkT2HHHHRk2bBi1tbXh7kLMkpKSQmlpqTM0\nHI7uRkOD/UJetGjtlMcXX9hDrKrKPBFjx8JRR5lhscMOkJ/fuX1MSbHg0BNOgMsug7POgiuvtGmY\n00+HAQM6tz/hoLzcjIYHHrD4lf33t3iU3XZr30tRXw+//GLTUx98YPvecAMUFppx9vvfm0cpcW2d\n0okTJzJx4sR1DlNZWdn6yG3SKQXSROQ+4CDgd6pathHtlwB/V9VHRWQ3bOojK9ibISJzgDtV9W4v\nRuM2Vc0J2u7DUmuOUNXfTJdsKPAzENTSER2N7kAgR9oFzjoixqxZ8PLL5oqfMwd69LCH2R572C9l\nvz/SPYxtVM0L8eWX8NVXtpSVmRHR+gGTkQGjR8Oee9oDbsyY6PMYzJwJ994LTz8N1dXm1bjySujX\nL9I923SmTDGvxQsvmEF30klwzjnmvdhUmprM4/TKK7bMnWuf5/77w3bbmcdp0CCb0goyPKIi8BPW\nGBiHALtspIHRB8gBFnmrwinItUE6oqPhcDjCyLRpcOON9gWbmGi/lMeNg6VL4eGH7VeZ328Gx6hR\nMHiwfVFusQX06WPz0462aWmB11+Hp54y42KR9zXcr5+lhgZ+IefmQkGBLf36QVZW9GdyDBxoD+Yb\nb4RHH7Vx8uyzcNppcMkl0LdvpHu4flTh3Xet/x98YGP5uuus/1lZHT9ufDzsuqstd95pBsx//wuv\nvWZGx2pPBsPnMyNm1CibZtnIzzvcYlxfYpVU64GvROQbTHDrO1VdLSKpwFWYUXEgVt+kHovPmARr\nBLmeBJ4Wkae8Ptdh6anBglzvAe+KSECTowV40WWWOBxdhG++Mff366+ba/fee+0XXHBAX0sL/Pij\npTV++KG1nT17rcaC328Pm4DRUVxsbvyCAvu1lpcX/Q/LcFBfD88/D7feCj//bNkdJ51kv2THj+/8\nqY5wkpxsv/pPOcXG0G23mdFx5pnw97/bGIg2PvkELr/c0nvHjYN//tMyaBISQnseEcvm2XpruOoq\n+39auBB+/dWmWKZONSPkrbcsXXgjCLcnYzssw8PvLft5yx+BxzFhrUOALTBvRbn36mOtZgZBf69v\nbkfa2Kcbfls4HF2MH36wL9jXXoOhQ+1X9oQJ67hu1xAXZ1HzI0fCeefZusZGcwFPn25floHlX/+y\n6YCAAQKQmWm/1gYPttehQy22oLi4axofVVXm/bnrLnuYHHIIPP64eYG6OmlpFgx69tlmbNxyi137\n+efDhRfaWIg033wDV1xhYmRbb21G8/77d95YjIszj0mfPubFCubDD3+7ri1UtdMWIBfzMOwUtG4h\ncH7Q+wzMU3FU0Pt6rER8oM0Q7zjbeu+Hee9HB7XZBzNYCtrpyxhAS0pKtC1KSkp0fdu7O+7+OMLO\nggWqp5yiKqI6aJDqc8+pNjWF9hwtLarLl6tOnar68suqN96oetJJqttvr5qTo2pOatV+/VTPOkv1\nrbdUa2tD24dIUF6uetllqpmZqgkJdp+nTYt0ryJLRYXqRRep+v2q6emqf/6zjYtIMGWK6iGH2Ngb\nNkz1pZdUm5sj05d2CDwDgDG6nud+RHUyRKQ/lmIarIFRJSJfYRoYL2LTLU4nw+HoLlRXm9v+9tvN\ntX3PPZYNEGrXMNgvwqwsW0aM+O328nL7NTlpkv2KvP9++3XXvz8MGwa9e9t0TWqqLcnJkJRk0wu9\netn2ggJbF2laWix487nn4IknbI79jDPsl3thYaR7F3mysy3d9dxz4cEH4bHHLPNixx1tKuWII8L/\nOX7xhY39V16xMfbss+a18/nCe94wEmmdjALMEChv1TxYAyOfCOlkOByOTqSlxb5UL77Y5nvPO8/c\n2ZF0W+fnw4EH2nLPPSZu9OWXJmc9bRpMnmwKlrW1a1/r69eKTQXo2XNtfMOwYTYNM2hQ21M+oWD5\n8rV9DO7r0qUWcxCYJsjODs/5Y5nevS2g8sorLQDywQfhuONsPJ58ssVyDB0auvO1tNhU4K23mrbI\nkCFWr+XEE8NjWHcyEdfJcESWWbNmcfPNN/Puu++ycOFCEhMT2WqrrTjqqKP405/+hN+lATo6g++/\nNx2Dzz83Kembb4Zo018RWauWuD5UoaLCMjMWLrRl7lxLE7z9dlixwtrFx9vDauRIi4HYeWdTZGzv\nV2tTkx1z/nw75uLF5mlZuhSWLbPXpUttXUWF7RMXZ3oQw4aZN2jvve1cMfzLuNNISDDvxRFHWNDj\nww+bd+PWWy1O57jj4OijzWPVEaqqTCTs7rthxgzYaSczag48sEtlQHWKkeGlse6P6WQsCtq0GAvO\nzGddb0Y+8F1Qm0QRyWjlzcj3tgXarBMS7OlkZAe1aZP2xLiGdCTfOMZ44403OOqoo/D7/ZxwwgmM\nGDGChoYGPv30Uy666CKmTZvGQw89FOluOroy8+ZZSt7DD9svuPff37hgsmhGxFI8c3Mt1S8YVTME\nfv7ZvCJTp5r880svWYBqfLx5PQJGQCDAr7HRxJZaWtYeKyHBvBI9e9rSu7elF/bsaZkzw4ZZAKv7\nobD5DBkCd9xhY/WNN2zK6aKL4K9/temUbbYxZc3+/S1IuE+ftr1UTU3mCfvnP02vo7YWDj/cjrfd\ndp1+WRtLVItxtdLJmNXG9oXArap6p/c+AzM4TlDVl7z3S7ECacE6GaXAeLUCaUOBn4BtdG2BtL2B\nN4E+2kYa68aKcXVVsak5c+YwcuRIioqKeP/998lrlbY1a9Ys3njjDf7yl7+0uX9Xvz+OMFJTA//5\nj/2Ke+89E9G67DKbC+8C7uEOUVtrlUd//tk8FIGQ0wA+n/1iDkT69+4NOTldM+MlVlixwsTg3nzT\nMqBmzlz7mYlYnEtxsS0+nxmUP/1k02l5eaZvccYZ9nnGIFEhxiUiDwATgIOBVSISSLauVFVP4YO7\ngMtFZAYwB9PRmI8XrOkFgj4O3CEiK4Bq4B7gM11XJ2MS8KiInImVer8XmNiWgeGAm2++mVWrVvH4\n44//xsAAGDBgQLsGhsOxyajCO++YYfHKKxa/sPPOpk9w1FFry3d3V1JS1goiOWKDrCw49VRbwKTW\n580z9dnWS0ODpaAef7yp0W6zTbeZsgr3dMkZ2HTIx977gK/vZOAZT2TrRK/Nq962ZcD2qtoA4Ilr\nCRbA+T6mrfEWprWB1yYLqAH2xLJNGoAXgLPCdWGxzuuvv86AAQPYLopddI4ugCq8/bYF0X39tcUc\nXHKJzWcXF0e6dw5H6EhMNKG3gQMj3ZOoItzRJftjnonfYwbGoarqU9Vngtq8hcVT5HvLIFWdEbT9\nLkzAa1+s7Ps3WB2T4GySF4BBwA5YYOlcIEFVXXWzNqiurmbBggVs1Xq+2OEIFaoWX/G738G++1og\n2zvvmBrn5Zc7A8Ph6CaE1ZOhqv8D/gdrUljbol5Vl7a1wYvHOAWLx/jIW3cyUCoi23rxGMMw4a2x\nQfEYfwHeEJELO226pLbW5lPDydCh60ood5CqKoufTe/uLmrH5tPSYlMfzc3mEp482TQlJk2y1Mlt\ntrE56333dfEDDkc3pLPFuNpiVxEpB1Zg0yGXq+pyb9tYYkWI6+efLa0pnJSUWHXDzSTDKwFcXV29\n2cdydHEqKkyOO7DMnGnpmPPmmZbFqlW/3adPH9hnH6sJsd9+zrhwOLoxkTYy3gL+jRVEGwjcCLwp\nIturpb0UECtCXEOHmhEQ7nOEgPT0dHr37s2PP/4YkuM5uggLF1o9jx9+sCj46dNN1ClAYaEJSA0Z\nAnvtZdkNaWm2+Hy2DBtm251h4XA4iLCRoaovBr39SUSmAjOBXYEPItKpjpKSEhIvQ2dx4IEH8uij\nj/LVV1+54M/uzpdfmgbAyy+bTsOIERageeCBprMweLAZF6mpke6pw+GIMSLtyVgHVZ0tIsuwIM4P\nCLMQF3RfMa6LLrqI559/nj/+8Y+89957v0ljnTlzJm+88QbnnHNOhHroCCvNzaZVcccdVi9hiy2s\nEufxx0dH9UmHwxE1bI4YV1QZGSLSB8gBAqqgJVgl1T2AYCGuIuALr80XQA8RGR0Ul7EHlvb61YbO\neeedd7YrxtWVGTBgAC+88AJ/+MMfGDZs2DqKn5999hn/+te/OPnkkyPdTUeoqa624lh33w2zZ8Mu\nu8Crr8IBB3QpKWOHwxE6JkyYwIQJE9ZZFyTGtV7CLcaVinklAhO0A0RkFFaFdTlwFRaTsdhrdzMw\nHZgETogr3Bx00EH88MMP3Hrrrbz66qs89NBDJCYmMmLECG677Tb+9Kc/RbqLjlBRV2cFvm66yRQ3\njz7apKzDHazscDi6NeH2ZJyMPfAD3O69Pg38GRjpvaZi2SALgMNVtTFon4uBnbDME/Ha7N3qPGcC\nH2LZJooZKueH8Dq6LAMHDnT1Sboyzc1W2fSKK0yu+vTTTQwrRqWMHQ5HbBFu/+gM2hbjOsWTFf8A\nU+c8CDM4SoCJIhJcWeYWIAPYDRgDlAEPtzrPQ1gK7DjMIInDRLwcju7LRx9ZMPLJJ5uU8bRpcN99\nzsBwOBydRqTFuM4FrlPV1702J2Dpqb8HXowpMS6HI1poaIDzzoMHH4Tx4y2wc/z4SPfK4XB0QyIW\n6SUi/TEdi2ChrSosWHN7b9U2tCHGhXkzAm02JMblcHQfysth993h8cfh/vvhs8+cgeFwOCJGJLNL\nCjBDoLzV+mChrXxiRYzL4Yg0X38Nhx8OTU02VeKMC4fDEWGiKoU1EnRXnQxHF6KlBe680wI6x46F\nf//b1DkdDocjBMSqTsZiLFskn3W9GfnAd0FtwirG1V11MhxBLF1qUto//GBVQktL1xb9ampa++r3\nm7T7iBFWk2P8+MhrSyxdCieeCG+9BX/7G1x/vZWcdjgcjhARtToZ68NT91yMCWf9AGuqrm4H3O81\nC7sYl6ObUlFhCpcvvmg1OgCSk01Oe9gwU72Mj7d6HPHxttTUmAHy8MP2MO/XD049Ff7yF+jRo/Ov\n4YMP4NhjzQB66y2rdOpwOBxRRMTEuFR1HpZmermIzADmYOmu8/EqpzoxLkfIWb0a7r0XbrjBphmO\nOgquuw623hoGDjSjYkM0N1tA5TPPwI03rp2qOOuszqnv0dQE115rhs5uu5kORu/e4T+vw+FwbCLh\n9mRsg2lhqLcEi3Gdoqq3iMh+wKtB+yjwPTDce3++d5z3sGyYJZiuRjAnAZ9gngvBqrpeHooLKC0t\nDcVhuhwxeV8++ghOOcVKlZ9xBlx1FfTsuenH8flg551tue46e+D//e9w++1w8cVw5pnmFQkH8+bB\nMcdYWup115lxszGGkcPhcEQCVY3ogkmL/wD0xGIr8oDsoO0XYxLkBwIjgFewSq2JQW0exDwhuwCj\ngc+BTzZw3jGAlpSUaFvMnTtXU1JSAsaRW9pYUlJSdO7cuW3ev6iirk71vPNUQXWnnVRLS0N/jtmz\nVf/4R1WfT7VXL9X771etrw/d8SsrVa+5RjU9XbVvX9VPPgndsR0Oh2MTKSkpCTwLxuh6nrXRkl3S\npKpL29m22YJdHelQUVERpaWlLFu2rCO7dwtyc3MpKiqKdDfWz08/2S//n3+2iqPnnhueYM3iYnj0\nUfNkXHMNnH023HqreUuOO85iOjpCXR088IBNy9TUwJ//DJdfDtnZIe2+w+FwhINoMTK2EJEFwGos\nkPNSVZ3XnmCXiAQEu16kHcEuEQkIdnXIyAAzNKL+Iepom5YWqzR66aUwYAB88w2MHBn+8w4aZDES\nl1wCV15pkt433QR//asZOxsTs6FqEuDPPAOPPQaVlRZgesUVThLc4XDEFNFgZHyJxVT8AvQCrgY+\nFpERhE6wy9GdmDfP0jo/+MDktf/v/8IXI9EeW25pehUlJRazcfrpZmiMHg1FReaJyMqyrBSfzwyJ\nykooK4Nvv4VZs2zbySdbQOnAgZ3bf4fD4QgBETcyVHVS0NsfReRrYC5wFPBzuM/fnhhX65xgR4zw\nz39aUGdaGrz3nklsR5KxY+G//4U5c+CFF2DqVDMkvv8eli83w6KpyVJmMzMtS2S//eCAAyxzxO+P\nbP8dDke3Z3PEuEQtCDKq8AyNd4DHsCDPrVX1h6DtHwLfqer5IrIbVqskK9ibISJzgDtV9e52zjEG\nKCkpKWlTjMsRY1RVWRzEs8/C0UdbcbCsrEj3yuFwOLokQWJcY1W1XfXKCMsV/hYRScO0NRaq6mxM\ntXOPoO0Bwa7PvVXBgl2BNq0Fuxxdmddfh1Gj4JVXLI5h4kRnYDgcDkcUEPHpEhG5FXgNmyIpBK4B\nGoF/eE02RbBrF+BILBajBovn6NqowpIl5oKfO9eW+fNtfXy8TRvk5NiSmWnz/4EloHDZarooZpgx\nw2Iu3ngD9toL3n8f+vePdK8cDofD4RFxIwPoA7wA5ABLgU+B8apaAaAm2JUCPAz0wES39lPVhqBj\nnA8MwNJdV2NTLeXAJBEZrKqxmYe6bBn88gusWLHuMn/+WoOirMxULAOkploGQnw8NDZa2mNFBdTX\nt30OERg3DvbZB/beG7bbDhISOuf6OsrixaZ2+cgj0KsXvPwy/P73di0Oh8PhiBoibmSo6gYjLFX1\naizrpL3t9SLSA7hHVc8FEBEB5mEaGreEpLPhQtWMh/JymDnTsiLeew+mTFm3nd9v0wC9e1vdjAMO\nsEyFfv3WLtnZv33YqkJtrcUtNDevXaqrLZPhnXfg/vtNQTIjw4IlA0bHgAGddx82RHk53Hab6UYk\nJlrWxjnnQEpKpHvmcDgcjjaIuJERCkQkARgL/F9gnaqqiLyLaWVElu++s+qeq1aZZ2HhQvNArFxp\nUx2zZtm2AH36wB57wAUXWHZCTo6lM3Y000DEPBxtaTSMGmUaDM3NMHkyvP02TJpkRb+amkz3Ye+9\nLdNh550hL++3xwgnLS0mB/7YY5YSmpQE559v6aAu7sLhcDiimi5hZAC5gI+29TSGdH53WvH881bX\nwuezB31+/lqvw5AhcNJJ5pHIzzcDo7i4813/Pp9Nm4wbZ3U4qqrMozJpki0PPGDthg6FHXaALbYw\nL0f//vbalgdlc5g5E/7xD3jySft78GDzXJx2mjMuHA6HI0boKkZGdHPddVb1MzExduIGMjLgkENs\nAViwAD7+2JavvzavQnCedHKyGUl5eeZ5yc5e+5qdDYWF5hUZMMCCUQOoWuzJ7NkmAf7FF1bhdNo0\nM8gOO8wMjZ12ip1753A4HA4gSnUyNhVvuqQWOFxVXw1a/xSQqaqHtrHPGKBk5513dmJcHWXFCjMO\nZs40I2TJEluWL7elomLta3DgqYgFpiYk2HRIIHBVBEaMME/JHntYzImLt3A4HI6I0p4Y18cffwwb\n0MnoEkYGgIh8CXzVKvCzDAsGvbWN9k6Mq7MIeCtmzFgbf9LYaDEfAH372rTLwIHmQXE4HA5HVLOx\nYlxdabrkDuApESnBiqKdD6QAT0WyUw7MQ9Gzpy3bRz4ON9aYOHGi86w5oh43Th1tEVHFTxGZIyIt\nQUuziFzUqk1fEXlDRFaJyGIRuUVE4lq1GQmcjRlNTwBTgZHAPuspIe9wxASt3ZQORzTixqmjLSIt\nK67A5Vgl1QKsCuu9gY2eMfEmZjyMB07EKrZeG9QmHZgEzAZGAccADcDjqvptZ1yEw+FwOByO3xJp\nIwOgRlWXquoSb6kL2rYPMBQ4VlWnehVbrwDOEpHAVM9xQAJwqqqWquqLwD3ABeHqcEctdrdf9Jwz\nlvraUWLlnsbKfpE4Zyz1taN05HyxdF+6+2cfDUbGJSKyTEQmi8iFIuIL2jYemNpKFnwSkAlsGdTm\nY1VtatVmiIiEpShHrAy2WNkvEueMpb52lFi5p7GyXyTOGUt97SjOyAjtfpE6Z3tEOvDzbmAysBzY\nAbgJmza50NteQNsCW4FtU7zXWetp017Rez9AaWnpJne6srKSyZPbDaZ1+3UA11e3X7TvF4lzdoe+\ndmQ/d18if86gZ+f6pahVNaQLcCPQsp6lGRjczr4nAfVAgvf+YeCtVm2SvePs472fBDzYqs0w7zxD\n1tPPY7CYELe4xS1ucYtb3NKx5Zj12QTh8GTcBjy5gTatPQ8Bvsa8K8XAr8BiYFyrNvne6+Kg1/wN\ntGmLScCxWPn41etp53A4HA6HY1382LN60voahdzI8Eq0V3Rw99GYl2KJ9/4L4DIRyQ2Ky9gbmwKZ\nFtTmehHxqWpzUJtfVLW9qZJAP1/oYD8dDofD4ejufL6hBhFT/BSR8cB2wAdANRaTcQfwhqqe4rWJ\nA74DFgIXYymuzwCPqOoVXpsM4GfgHeBmYCvgceBcVX28M6/J4XA4HA7HWiJpZIwGHsCqpCZhOhfP\nAHeqamNQu77Ag8CuwCpMwfNSVW0JajMCuB+bWlmGSYnf1ikX4nA4HA6Ho026TO0Sh8PhcDgc0UU0\n6GQ4HA6Hw+HogkTcyBCRq1rVL2kRkWmt2lwrIgtFpFZE3hGRQa22J4nI/Z6oV7WI/EtE8jr3ShwO\nh8PhcAQTcSPD40fW1i8pAHYKbBCRi7HiZ38CtsXiMiaJSGLQ/ncBBwCHAzsDvYF/d0rPHQ6Hw+Fw\ntEmkFT8DNK2nWuq5wHWq+jqAiJyAKXr+HnjRyy45BfiDqn7ktTkZKBWRbVX16/B33+FwOBwOR2ui\nxZOxhYgsEJGZIvKcl1GCiPTHPBvvBRqqahXwFbC9t2obzFgKbvMLUBbUxuFwOBwORycTDUbGl5ic\n+D7AGUB/4GMRScUMDKXt+iUF3t/5QINnfLTXxuFwOBwORycT8ekSr3x7gB9F5GtgLnAUJrIVFkQk\nBzNs5uBkxR0Oh8Ph2BTWyIp7CtptEnEjozWqWiki04FBwIeAYN6KYG9GPqYEClafJFFEMlp5M/JZ\nf+2SfYDnQ9Vvh8PhcDi6IceynhIdUWdkiEgaZmA8raqzRWQxsAfwg7c9A5Mjv9/bpQRo8tr8x2sz\nBCjC6pq0xxyA5557jmHDhm1SH88//3zuvPPOTdrH7Rdd5+wOfXX7hXa/SJyzO/S1I/u5+xL5cbJj\n5QAAIABJREFUc5aWlnLccceB9yxtj4gbGSJyK/AaNkVSCFwDNAL/8JrcBVwuIjOwi7kOmA/8FywQ\nVEQeB+4QkRVYHZR7gM82kFmyGmDYsGGMGTNmk/qcmZm5yfu4/aLrnN2hr26/0O4XiXN2h752ZD93\nX6LqnOsNN4i4kQH0wVwtOcBS4FNgfGCOR1VvEZEU4GGgB/AJsJ+qNgQd43ygGfgXVgflf8BZ4erw\nhAkTQrqfqlLV3Ex5QwPlDQ0saWykvKGBxQ0NVDY10bDbblw+axZ9/X6KkpIYnZZGQVJSp/czXPtt\nzL71LS38tGoVk6urKamp4dvqan6traVh9GgyP/mkzX3iREiOiyPV5yPdWzLj48lPTMS3++7cN38+\nvZKS6J2YyNCUFLISEkLS11Dv11Fi5fOPlf0icc5Y6mtH6cj5Yum+dPfPvkvVLhGRs4ALsaySKcBf\nVPWbdtqOAUpKSko6bC1uCqubm3l3xQq+qa5mXn09SxoaKPeMiSUNDdS3+hziRchPSKBHvNmBlc3N\nLKyvJ1AVblhKCntmZbF/dja7ZWWRFBcNiUIdZ2VjI7/W1bGssZGVTU0sqK9nRl0dM1evZmZdHWWr\nV9OMpUMNTUlhXHo6w1NTiRdp95hNqtS1tLCquZnq5maqm5pY2dS05r4vbmigMei+D09JYYfMTLZL\nT2dkWhpbpqaS6vOF/+I3wMEHH8yrr74a6W44HOvFjdPuxeTJkxk7dizAWFWd3F67aPBkhAQRORq4\nHVMG/RrzbkwSkcGquiySfbulrIxr58xhVUsL+QkJ9PP7yU9MZOu0NPISEshPTLTF+zsvMZGs+Hji\nWj1Am1pamF9fzxdVVXywciX/XbaMexcsoCgpiZsHDODovDxkPQ/dSBDo8+zVq/lx1SqmrlpF2erV\nVDc3A1DR2MiSxkZWNDWts1+az8dAv5+Byckc0bMnA5OTGZmaysi0tJA9+FWV5U1NzK+vZ0pNDZ9X\nVvJ5VRWPL1qEYhHH/f1+hqemsmVKCsNTU+mblESzKo2qNHlLfUsLP9fWMrmmhgX19e2eL+BViROh\nsaUFnwi9EhMpTEqid1ISfT0vVZ+kpKj7HB0Oh6MjdBkjAzMqHlbVZwBE5AxMavwU4JZIdmx4SgqX\n9evHobm5DEtN7fBx4uPiKE5Opjg5mQn5+agqU2pquHrOHCaUlvJseTmPDBlC4UZMpYQDVeX7mhpe\nWrqUzyorKauvZ57ngQBIFGF4air9/X4KEk0VfruMDHomJFDs9zM4JYX8hASyEhJIiYsL+4NWRMhJ\nSCAnIYFRaWmcUGCyKrXNzUxbtYofVq1i2qpV/FRby8QlSyhbjwGRm5DA2LQ0xqWn/8Y4BBN7qWtu\npqa5mRYgw+ejSZXpdXV8sHIli4K8KvkJCYxMS6MwKYnxGRnsfvjh4bh8hyOkdPY0iyM26BLTJSKS\nANQCh6vqq0HrnwIyVfXQNvbp1OmScPPqsmWcMX06q5qbuX3gQE7t1atTfg0HDIsXly7lX0uXMqOu\njuz4ePbMyqK/30+x30//5GSK/X4G+P0kxPC0TnVTE4sbGkgQISEujngREkSIFyHd59us+92iysL6\neibX1PBNdTXTVq2irL6e76qracYM1YNzczk0N5dx6enO0+FwbAZlZWUsWxZRB3fUk5ubS1FRUbvb\nu9t0SS7go21l0CGd353O5+DcXH6XmckFM2dy2vTpvLBkCQ8OHsyQlJSQn0tV+c7zWLy0ZAkzV68m\nOz6eQ3NzuX+LLditR4+YNibaIz0+nvT48PzLxInQx++nj9/Pwbm5a9ZXNjXx3ooVvLpsGY8uXMhN\nZWUMS0nh1F69OCE/n56Jies5qsPhaE1ZWRnDhg2jtrY20l2JalJSUigtLV2vobExdBUjwwFkJSTw\n5NChHJOXx5+mT2fY11+zf3Y2e2Vns0NGBsNSUkhr9ZBs8WIKVgctdd4rQE1zMxWNjVQ0NrKooYHv\nvF/a8+vryYmP59CePXmgZ88ua1hEmsz4eA7r2ZPDevakqaWFD1au5InFi7ls1iwunTWLQ3JzOTYv\nj32zs/FHQZCqwxHtLFu2jNra2g5pJHUXAhoYy5Ytc0aGxzIshTW/1foNqX5y/vnnk5mZuc66CRMm\nxPT84l7Z2UwbN47nyst5evFiLp45c032SmpcHIlxcfhEqG1upralZQNHW0tOfDyj0tKYkJfHnllZ\nzrDoZOLj4tjLMxorGht5rrycJxYt4tCffiLD5+PInj05vqCAHTMyiHefi8OxXjqikdRdmThxIhMn\nTlxnXWVl5Ubt2yWMDFVtFJESTPXzVQCxSes9MGGudrnzzju75EBL9vk4rXdvTuvdm/qWFr6vqWFG\nXR1LvADDJlVSvGyHFJ8Pf1zcmiU5Lm5NSmyaz0dOfDxZCQn4XBxA1JCTkMC5ffpwbp8+/LxqFS8s\nWcKz5eU8vngxKXFxDE9NpTAxkYz4eIr9frZNT2fbjAzy3PSKw+HYRNr64R0Uk7FeuoSR4XEH8JRn\nbARSWFOApyLZqWggKS6O7TIy2C4jI9JdcYSBoampXNu/P1cXF/N1VRWfVFbyS20tCxsamL16Nf9b\nvpzrGhsB1hgc4zMyOCQ3lwHJyRHuvcPh6Mp0GSNDVV8UkVzgWmya5HtgH1VdGtmeORydQ5wI4zMz\nGd9q+k9Vmbt6NV9XV/N1VRVfVVdz2ezZXDBzJmPS0jiyZ09OKijYKBVZh8Ph2BQiOnErInNEpCVo\naRaRi1q16Ssib4jIKhFZLCK3iEhcqzYjReRjTIxLgCtVdXtV/bYTL8fhiEpEhOLkZI7Ky+O2QYP4\nZPRolu24Iy8OH87A5GSumzuX4i+/5Mzp05lVVxfp7jocji5EpD0ZClwOPIoZB2AFzgDwjIk3gYXA\neKA38CzQ4O2HiKQDk4C3gdOBrYAnRWSFqj7WOZfhcMQWqT4fR+blcWReHisbG3lg4ULumj+fRxcu\n5PCePTmjd2927dHD6XE4HI7NIhpC0GtUdamqLvGW4J9S+wBDgWNVdaqqTgKuAM4SkYCBdByQAJyq\nqqWq+iIW7HlBZ16EwxGr9EhI4LJ+/Zgzfjx3DRrED6tWsfuUKQz9+mtunzePZQ0NGz6Iw+GICp5+\n+mni4uLWLMnJyRQWFrLvvvty7733UlNT06n9iQYj4xIRWSYik0XkQhEJTvYfD0xtVXtkEpAJbBnU\n5mNVbWrVZoiIrDs57XA42iXF5+PsPn2YNm4cH229Ndukp3PZrFkUfvEFx06bxicrV9IVFIIdjq6O\niHD99dfz3HPP8dBDD3HOOecgIpx33nlstdVWTJ06tdP6EunpkruBycByYAfgJqyC6oXe9gLaVvEM\nbJvivc5aT5uNS+Z1OByAfUHt3KMHO/fowd0NDTy1eDGPLFrEC99/z86ZmdzQvz879egR6W46HI71\nsO+++64jz3DxxRfz4YcfcsABB3DIIYdQWlpKUicEe4fckyEiN7YK5my9NIvIYABVvUtVP1bVH1X1\nEWyK4y9eLRKHwxFhchMTubCoiF+23ZbXRoygqrmZ333/Pfv98APfVlVFunsOh2MT2HXXXbniiiuY\nO3cuzz33XKecMxyejNuAJzfQprXnIcDXWJ+KgV8xtc5xrdoEVD0XB722pfQZ3KZduqLip8MRakSE\nA3Nz2T8nh38vXcqVc+YwbvJkDs7J4fr+/dkqLS3SXXQ4HBvB8ccfz2WXXcbbb7/NqaeeulH7RJXi\np6pWABUd3H000AIs8d5/AVwmIrlBcRl7Y1Mg04LaXC8iPlVtDmrzi6pu8C50VcVPhyMcxIlwZF4e\nh/XsycTycq6ZO5cxJSVc3LcvVxQXr1GKdTgc0UlhYSGZmZnMnDlzo/eJScVPERkPbAd8gKWt7oCp\ndj4bZBy8jRkTz4rIxUAv4DrgPlVt9Nq8AFwJPCEiN2MprOcA53bWtTgc3Q2fCMcVFHBUXh43lZVx\n/dy5vLxsGU8MGfIbMTCHI5apbW7m5zBXbB2akkJKJxY4TEtLo7q6esMNQ0AkAz/rgT8AVwFJwGxM\nTOvOQANVbRGRA4EHgc+BVZhM+FVBbapEZG/gfuBbrFja1ar6eOdchsPRfUmMi+PK4mIOy83llF9+\nYYfvvuPcPn24vn9/Ul1VWEcX4OfaWsaWlIT1HCVjxzImPT2s5wimpqaG/PzWUQbhIWJGhqp+B2y/\nEe3mAQduoM2PwC4h6prD4dhERqSl8fno0dw1fz5XzJnDS0uWcE6fPpxUUOCKsjlimqEpKZRsxLTA\n5p6js1iwYAGVlZUMGjSoU84XNiNDRC4DDgC2BupVNbuNNn2Bh4BdsSmTZ4BLVLUlqM1I4D4sAHQJ\nNlVya6vj7Ip5QbYEyoAbVPXp0F+Vw+Foj/i4OC4sKuL3ubncUFbGFbNn8/fZs9k3O5sT8vM5KCcH\nv/NuOGKMFJ+vU70M4eaZZ55BRNh333075XzhjNJKAF7Epjp+Q5BkeDwmqHUicBJW4CzQJiAZPhsY\nA/wNuFpE/hjUphh4HXgPGIVpbzwmInuF+HocDsdGMCglhSeHDmXB9ttz16BBLGlo4Khp0yj4/HNO\n/+UXPqusdKJeDkcEeP/997n++usZMGAAxxxzTKecM2yeDFW9BkBETmynSUAyfDcvc2SqiFwB3CQi\nV3sKnsGS4U1AqYiMxvQ0AnVJzgRmqWqgsNovIrITVur9nXBcm8Ph2DC5iYmcVVjIWYWF/FJby7OL\nF/NseTmPLFrEAL+fEwoKOLuwkJwEJ4vjcIQSVeXNN9+ktLSUpqYmysvLef/993nnnXfo378/r776\nKomdNI0ZycDP9iTDH8SmPabQvmT4RSKS6WWhjAfebXXsSQQFkDocjsgyJCWF6wcM4Nr+/fl45Uqe\nKS/n1rIy7pw3j0v79eOcwkKS3VSKwxESRISrrrL8iMTERLKzs9lqq6245557OOmkk0hNTe20vkTS\nyAiVZHh7x8kQkSRVrQ9Zjx0Ox2YRJ8KuWVnsmpXFTQMGcN3cuVw+ezb3zp/PlcXFnFxQQILT2nA4\nOsyJJ57IiSe2N4HQ+WySkSEiNwIXr6eJAsNUdfpm9WojuhKqAznFT4cjMuQlJnLvFltwbmEhV86Z\nw+nTp3PrvHnc0L8/R/bsGdVl5uuam/lo5Uq+qKrip1WrWN7URKrPxwC/nx0yM9k5M5NenVAXwuHo\nDDpT8XNzJMNbszmS4boRbao2xovhFD8djsgyKCWFF4YP5+KiIi6bNYujp03jkR49uH/wYIZ0Ymrf\nhljZ2MjrFRX8Z9ky/rd8ObUtLeQmJLB1Whp5CQmsamnhzeXLuWfBAgCGpaRwZM+enNarF338/gj3\n3uHoOJ2m+LmZkuGtCZVk+BfAfq2Ovbe33uFwxAij0tJ4Y+RI3qyo4C+//spW33zDXwoLuaioiPwI\naW1UNjXx76VL+ceSJXywciVNqmyXns6VxcUcnJPD0JSU33hcFtfX81FlJZOWL+eO+fO5Ye5cDsrN\n5c+9e7NnVlZUe2gcjlATTp2MvkA20A/wicgob9MMVV1F6CTDHwLO8rY/AewBHAHsH65rczgc4WP/\nnBx269GDW+fN4/Z587hnwQJ+l5nJQTk5HJSTw6Awezeqmpp4o6KCfy9dyhvLl1Pf0sJuPXpw96BB\nHJKbS+EGpkEKkpI4Oi+Po/PyuHvQIJ4rL+eBhQvZ+4cf2CY9nauLi9k/O9sZG45uQTgDP68FTgh6\nP9l73Q3LGAmJZLiqzhGRA7BsknOA+VjKa+uME4fDESMk+3xcWVzMXwoL+ceSJbxWUcGls2ZxwcyZ\nFPv97JmVxTF5eezSowdxIXhYr2hs5FXPsHh7+XLqVdkmPZ1ri4s5Jj9/g4ZFe6THx3NmYSFn9O7N\n+ytXcvWcORw4dSrjMzJ4fMgQhndilL/DEQnCaWT8CnzJehQ/gblBf6cAFwIlmIhXgDgs0FOwWIy2\nvlEC4eiBNi483eHoAmQlJHBmYSFnFhZS09TEeytX8sGKFbxeUcFjixZRlJTEcfn5nFBQsEnxGzVN\nTXxXU8O31dX8b/ly3vemQnbMyODGAQM4rGdP+oUwjkJE2CMri9179OC9FSs4Z8YMxpaUcMuAAZxV\nWBgSQ8nhiEbCaWQEFD+/AE5ZT7sTgf+x1nhYGdgQpPj5NnA6Nl3ypIisUNXHvDbFmOLnA8AxwJ6Y\n4udCVXViXA5HFyEtPp5DcnM5JDeXOwcN4ouqKp5ZvJgHFi7k/8rK2C49nRMKCjg6L28dgS9VZVlj\nI2X19by/YgX/WbaML6uqUMAfF8f2GRncNWgQh+bm0jvMGSEiwp7Z2ZSMHcsls2ZxzowZvF5RwZND\nh4b93A5HJIik4meASlVd2s42p/jpcDh+g4iwQ2YmO2RmctegQbxWUcEz5eWc8+uvnDdjxprpDVWl\nvLGR1S1WDik5Lo59srN5ePBgts3IYHhKSkR0OZJ9Pu7eYgsOyMnhpJ9/ZqtvvuHhwYM5Ii+v0/vi\ncISTSIpxBbhfRB7HUl8fUtXgFFmn+OlwONaL3+fjyLw8jszLo7yhgZeWLGFRQ8Oa7fmJifRNSqJP\nUhJbpqaSEkXKontnZzN13DjOmD6dI6dN44SKCu7dYgsy4qPhq7lrU1paGukuRC2hvDeRHslXAO8D\ntVja6QMikqqq93nbneKnw+HYaPITEzm7T59Id2OTyElI4MXhw3m2vJyzf/2VjysreWboUH7Xo0ek\nu9Ylyc3NJSUlheOOOy7SXYlqUlJSyM3N3ezjRFTxU1VvCHo7RURSsUqr97Wzy5qubMzxNwan+Olw\nOCKNiHBCQQE7Z2Zy/M8/s8v33/PXvn25vF8/Mp1XI6QUFRVRWlrKsmXLNty4G5Obm0tRURGweYqf\nsikll0UkB8jZQLNZwdMbXkzGne1kl7Q+/v7Aa4BfVRtF5GkgXVUPC2qzK1bWPVtVK0XkI6BEVS8I\nanOSd86s9ZxrDFBSUlLiFD8dDkfU0KzKrWVlXDt3LilxcVzTvz9n9O6Nz2WgOKKIIMXPsao6ub12\nkVT8bIvRwIogMS6n+OlwOLoVPhEu6deP4wsKuHL2bM7+9VeeXLSIhwYPZpuMjEh3z+HYJCKm+OkJ\nceVjWhqrMcPgUuCWoMM4xU+Hw9EtKUxK4vGhQ/ljr16cMX06206ezPl9+nBD//74oyh41dG5qCqL\nGxqYWVfHzNWrqW1uJjEujtyEBPolJVHk95MVHx81irIRU/wEGoGzgDuwGIsZwHkB/Qtwip8Oh8Ox\nfWYmJWPHcuf8+Vw+ezbvrFjB88OGsVVaWqS75uhEvqmq4r4FC3itooIVTWsTLhNEaGwV9pDp8zEi\nNZURqakUJiWR7vORHh9Phs9Hus9HRnw86T4ffZKSyArSlAkHYTEyRKQf0IwpehYAC4DngRsCUyGq\nOklEpmGeiF2B3sBgEYlT1ZagwznFT4fD0a2Jj4vjb0VF7J2dzbHTprFNSQk3DhjAeX36OLXQLkxd\nczOvVVRw9/z5fF5VRX+/n7MLC9kmPZ2Bycn09/tJ8floUWVJQwNl9fXMXb2aGXV1/LhqFV9WVVHe\n2Eh1UxOrWlraPEfvxER269GDPbOyOCQ3N+RGR7g8GUOxB/5pwExgBCaelQJcBCAiccCbwEJM66I3\n8CzQAFzutXGKnw6Hw+ExKi2Nb8eO5e+zZ/PXmTN5raKChwYP3iRJdUf0oqqU1tby9vLlvLNiBR+u\nXEltSwu7ZGbyny235KDc3DYDgONEKEhKoiApiW3bidtpVqWmuZmqpiaqm5upbGqirL6ekupq3lux\ngheWLCFx+nT+kJfH5f36hawQ4SZll2zWiUQuBM5Q1UHe+/2AV4FegVLvInI6cBPQU1WbRORMrDJr\nQSBjxUujPURVh3vvbwb2U9WRQeeaCGSqartxGS67xOFwxDLvr1jBqb/8woL6es7r04fL+/VzIl4x\nyPLGRr6oquLNigper6igrL6eJBF2ysxkr+xsDsnJYWgnFNJbXF/Pc+Xl3DF/PksaGjixoIBLi4ra\nNTbCkl2ymfQAlge9Hw9MDRgYHpOwqqxbAlNwip8Oh8PRJrtnZTFt3DhumzePG8vKeLa8nEuLiji5\noID0TjQ2Vjc306BKiyrJPh9JQTLtzao0BrnpRWTNnPaq5maS4uJI7WZBrKrKt9XV/HPJEt5cvpzS\n2loA+vv9HJybywHZ2ezco0enK9MWJCVxYVERZxUW8vDChdxYVsYTixezRXIyO2dmMiotjeGpqSSJ\n0KDKDytWbNRxO2Ukisgg4Gys5kiA9pQ6A9um4BQ/HQ6Ho12SfT6uKC7mxIICLps1iwtmzODK2bM5\nuVcvdsjIYHBKCoOSk0P6IF9cX8+7K1bwaWUln1ZW8pP3kAzgj4tDgPqWFtqOAliXrPh4+iQl0ddb\n+iQl0dfvp09SEoWJifTz+0nuAoZITVMTdy9YwOOLFjF79Wp6JiRwSG4ulxYVMT4jg0HJyVGREZLs\n83Fe376c1rs3b1VU8N7KlXxZVcWz5eU0BM98zJy5UccLu+KniBQCbwH/VNUnNuV86+tKiI7jFD8d\nDkfMU+T389zw4dw4YAD3L1jAk4sXc9f8+Wu258THrwkQFSwjIdXnI9XnIychgRGpqWyfkcHWaWkU\nJCaS7vMhItS3tDBv9Wrm1tfzeWUlr1VU8E11NQDDU1LYMTOT8/v2tfZAXUsLK73Mh0QREuPiSAjy\nXgRPzqf6fNQ1NzO/vp559fXMr6/n6+pqXl62jKWNjQTTOzGRAcnJ9ExIsEwAEaqamlja2EhFYyM5\nCQn09/ttiiEriy1TU6PigQ3Q1NLCE4sXc9WcOSxvbOT4/Hwm5OezS2Ym8REozrexpPp8HJGXxxF5\neUycOJHnX3iBupaWNZkVNVVVfLURxwmr4qeI9AY+AD5X1ZNbHesa4CBVHRO0rhjzXIxW1SlO8dPh\ncDg6RkVjI7/W1jK9ro6F9fVrHvIKNLS0UNvSQk1zM+UNDUypqWHW6tVr9k2OiyMO1slISPf52Dc7\nmwNzctgvO5ueiYlh6/tqz/hY0NDAnNWrmVVXx8y6OpY3NaFAiyrpPh89ExPJjo9nWWMj0+vq+KKy\nknpVsuPjKfL76Z2YSILImrTE9Ph4kkTIT0wkMz6eVJ+PgX4/A5OT6ef3kxjih/57K1Zw7q+/Mq22\nlmPz87muuJji5OSQniNSRFzx0/NgvA98A5zSRpMvgMtEJDcoLmNvbApkWlAbp/jpcDgcm0hOQgI5\nmZmMb+WpbY9F9fX8UlvL4oYGyhsbUVUy4uMpSkqin99Psd9PQif98vb7fAxKSWFQSgq7bMJ+tc3N\nfFZZyVdVVSxoaGBRfT1NqsSJ0KxK2erV1LW0sGTFCqqam6lpbl6jMRGHeYQCRscWycnskJnJNunp\nG218qCrz6uv5aOVKHlm0iE8rK9kxI4Nvx45lTHr6pt+ILkC4dDJ6Ax8Cs7GU1byA60pVA/ETb2PG\nxLMicjHQC8skuS9IVtwpfjocDkcn0CspiV5JSZHuxmaR4vOxV3Y2e2VvsFQWYIGp8+vrmVlXxwzP\nWzKzro6vq6t5vrycVS0tpMTFsWNmJrv26MEOGRn0SUoiwZsGqmtpYXJ1Nd96y3c1NWuEsnbv0YN/\nbbklh+XmRs3UTSQIV+DnXsAAb5nnrQtMy/kAVLXFkxZ/EPgcWAU8BVwVOIhT/HQ4HA5HuPCJ0M/v\np5/fz+5Z686uN7W08F1NDR+uXMmHK1dyU1kZ1c3NbR6nT1IS49LTuaBPH0alpTE6LY0+fn9nXELU\nEy4j40PgSWB3Wil+tmo3N+jvFOBCoAR4MWi9U/x0dGsmTpzoApEdUU9XG6fxcXGMy8hgXEYGfysq\noqmlhV/r6ihvaKBRlUZVfCKMSk2lIMY9QOEkXA/jYMXP4cD5wBn81sgAOBErlFaATZm8EtgQpPg5\nGxgD/A24WkT+GNSmGFP8fA8YBdyNKX7uFeJrcjgiwsSJEyPdBYdjg3T1cRofF8ew1FR2zcpir+xs\n9s/JYZ/sbGdgbICweDJUdRJmHASYIyK3YYbGRa2aV6rq0nYOdRyQgE1/NAGlIjIa09sIFFI7E8to\nCRz3FxHZCTNsnKy4w+FwOBwRojOnFVorfga4X0SWishXInJyq23tKX4OEZHMoDZtKX5uH4pOt0VH\nLXa3X/ScM5b62lFi5Z7Gyn6ROGcs9bWjdOR8sXRfuvtn3ylGRpDi50OtNl0BHIUVNfsX8ICInB20\nfUOqoOtrkyEiYfFjxcpgi5X9InHOWOprR4mVexor+0XinLHU147ijIzQ7hepc7ZHRBU/VTU4RmOK\niKRicRf3bagrm9LvdvADlJaWbvKOlZWVTJ7crvaI268DuL66/aJ9v0icszv0tSP7ufsS+XMGPTvX\nm0YTMcXPdo6/P/Aa4FfVxjArfh6DZbw4HA6Hw+HoGMeq6gvtbYyk4mdbjAZWBIlxhVPxcxJwLDAH\nWL3+pg6Hw+FwOILwA8Wsm+TxGzbJk7GxeB6Mj7DU05OANQomAcVPT4grH/gSe8jvDdwK3KKq13pt\nMoCfsSyRgOLn48C5AUEuL4V1KvAAaxU/7wL2d4JcDofD4XBEjnAZGSdiD/x1VgOqqj6vzT7AjcBA\nb9sM4AFVfazVsUZgip/jMMXPe1T1tlZtdsYUP4djip/Xquqzob4uh8PhcDgcG09YjAyHw+FwOBwO\nJ7/tcDgcDocjLDgjwxESxCszKCInezE5DkfU4capIxboSuM05oyMwM13RBeqqiJShAXmHioi4Sq+\nFzO4sRp9uHH6W9w4jT660jiNGSNDRAIl4rXVevcPEgWISLyqlgH3YrVlBkW4SxHDjdXoxY3Ttbhx\nGr10pXEa9YGfIhKnqi1B70/AskhKVPWlyPXMESBYx0RE4oAVmIT81apaF9HOdSJurEY3bpwabpxG\nN11tnEa9JyPwzyAiySLyD6xc/DjgWRG5JaKdcwAQ9A+R431elwFnYeJq3QY3VqMbN07JVHSkAAAK\n0klEQVQNN06jm642TmPBkyHAg0AlkIwVVVsNHAi8CByoqm9FrocOLzDpKWCSqt7urSsFfgT+pKor\nIti9TsON1ejGjVPDjdPopquN06jyZATmCIPeizdfuBIrnJamqpWqWq+q/8bqnFwtIrkR6G63Q0QS\n2lqvqgux4ni7iMg4b/WZwOHA7l1xjteN1ejFjdO1uHEavXSXcRoVRoYYcUFuot6wTkDS/wHTgXgR\niQu6yedhLqQjYu3GxxLePT8XuM17nyQih4tIz6BmVwCDgX1EJEVVPwTeAC4B+nR2n8OFG6vRixun\na3HjNHrpbuM0okZGwJJTo0VERorIO8CbIjJJRI70tldh84ZHA1t76T2iqnOwD+oGYIvIXEXXx5sX\nHAZsJyLbAgcBzwG/C2rzNVYoZ7+g9adj9WYOF5HETu10iHFjNfpx49SN01ig241TVe30BTNuzgXu\nDlr3F2AJcA/we+BKoA7YCYjz2nyGWXMJQfslArOAHSNxLV19YW3czihs0D/hvX8Hm7/tH9S20Pss\nHgDyvHX3Ag1AcaSvpYPX78ZqDCxunLpxGgtLdxynkbzZD2EVWHf13l8DHBW0/RSgBXgFKPTW7QDU\nA4e2+sB8kb6R3WHB8rVLgH2BscAi4DQgPqjNk1ixu+OD1u0X6b5v5nW7sRpDixunbpzGwtJdxmkk\nbmywJfcW8DRWhXUrwAdsB3wP/ASc7/1TnAEkevu9BCzGApaCj+v+KcL/mfX27v8bQDzwGPAJMNbb\nngz8FwsqewrIiXTfQ3TdbqzGwOLGqRunsbB0t3Ea0RRWEbkA+ANWvv05EekB/Af7h7heVStE5BPs\nH+V0VZ0qIvnANqr6RsQ63g0JRKWLyDHYF9UT2D/Ie8BS4H5gDNADeBmYrKqVkepvqHFjNTZw49SN\n01igO43TiAR+BkUt/wOYA/xBRPKA7bGAmGe9f4YiwA+MByaISa2Wu3+GzkfXWqMvA5OBY4AkbN63\nFrgDOBj77D5Q1UoxtbqYxo3V2MKNUzdOY4HuNE4j5sloZcmdCzwDvAnMxOYOP8KiaZdgVvj3qro8\nIp11AGvliEVkd2y+9xtVvcDbNlhVp3t/i0ZqYIUBN1ZjCzdO3TiNBbrLOI244qeI+IG7MWv7eMyS\nOxazthcCx6rq917bdTT313PMmP5QYgERuR7YFbhWVd8OWr9Gd7+rEY6x6ggvbpy679RYoCuP00jr\nZMSp6mrgn1ig0lmqeiF2sw9V1S0D/wywVnN/A8fMBVKD3jtBmRASdD+fBxqB0cH3ONb/IdojTGM1\nznv1baitY9Nw4zSk4zQTi+EIvHffqSGiO4zTiBoZgQGuqu9jrrydRGRPVf1FTeFso7+ARSReRB4H\nvgLeFZGHRCTNWd+hxXPHiqqWYnOI/QPrIt23cBLisZogIg8AD3urnMcjxLhxGrJxej825fKmiFzh\n/bJ236khojuM04gHkrSy5OqBsZtqyYlIPDb/OAz4I5bGtTvwHxEpDHmnuzneP8FgLMXqp8C6yPYq\n/IRorG4HvAscAZwoIjt699N5M0KMG6ebNU73AqYBWwK3AvOwKZerW53DsZl09XEacSMjRJZcb0zM\n5F4vEvcaYG8sP/zPYmlcjtByOJbT/WCkO9JZhGisjgd+BU7EilHd7h075t2iUYobp5s4TkUkAzgK\nU6TcS1VfwQp0/QMYJ1ZLo8s8BKOELjtO4yPdAQiJJZcN9MXU7hCRJFWd4wXTnAF8iMm2OkLHzd0x\nsDEEY/XfwDuqOk1EWoBnReRUVX1cLJ2wKQzd7s64cbrp4zQe+BSYoqqNnsHSICLJQLKq1rpA0JDT\nZcdpxLNLAojIpUAv4IL1fdGKyCVYENKPqvpfb50fKAWeVtWrRSRBVRu9bdOBt1X1bPeP4QgFmzNW\nW23PAa7C6kr0V9VmN0YdoSKE49Tnjc2HgCRVPTlsnXZ0OaLJyFhvKpU3l/0SpoZWiU2PvAL8zVt3\nC1bNbmdVXSIiyapaJyJnAtepam7YL8LRLejgWP0PcImqLg42JMSqMD4H/FdV/7ahYzscG0sIxmlA\nxyGgv/EV8IjndXPGsGOjiHhMRoCN+GI9GhOPGQvsD+wDHAj8FXMJvgzUYL8MAVZ7rwuBOhEZGvJO\nO7olHRyrBwHniUhOq0DPqcAjwGki0s/7Ut/Vmxd3ODpMCMZpsIFRDAzAplEC0zEDYG0qtsPRFlE/\nOMTIBMZh0c4A9ar6JXAzVsHuYFX9AvtFeKKIHMLaeJMxwM+q+nMnd93RzdiIsRowjNcEeqpqHVYE\n6TvgRRH5FovbyO7k7ju6CZs4TgPein2BMlX9RURGe16NL704Iud5c7RLVBoZIjJKRFLBBrlaYZhk\nIPDrLtF7vQtYBhwiItlYZO4DWDrrWyLyT2w65SXvuC7tyhFSNnGsLgf2FpFe3r6B8ZiEGRXjMJ2X\nXqo6p3OuwNEd2Jxx6jEcmCkidwDfYh64vi5Q2bEhosrIEJHDRWQe9kvuexG5xDMewAyH4730qXoR\nSVTVBqx63e5AgarWq+pFwKnAZ1iJ3DGq+gh0rdxjR2TZjLG6B56XwnM57wi8jhVF2kJVz/LaOhyb\nTSjGqZgO0cGYtstoYCtV/aOq1nf6BTlijmgK/NwWeBrzRnwO7ILFV9wH/B+Qg5XBfVdVz2iVQbIS\nOFNVJ0ak845uRSjHqogUAMWeq9rhCBmhGqdiOkOnA99pUF0Nh2NjiLhORlCU8hjMffeEqtYA34pI\nInAoME9VH/RcdfeIyPOq+om3/3DMY1EZoUtwdBPCMVZVdTGwuLOvxdF1CeE4rQJQ1ZVYrIbDsclE\nfLokaAqjPzAdCFY+vM9bd5gX3fwwpjr3TxH5u4iMxEoaLwdKOqvPju6JG6uO/2/vfkGrjMI4jn+f\nra1Z1KII9iWZIg4ss9hNE5NmEcyLZo2uaBiCqFGDSVCDKBNMImMWg1a9Ioo8hvO+4woLhvv+Odfv\np+1yGefC74WH857zPDWYYU5f97Vmza/ei4yIWIuIWxFxtdnOa70AVoHDzfcWM/Mr5dDmAeBsZv7O\nzHXgAaUN6yPgBHApMz/3+kM098yqamBONWa9ncloTirfBlYoLb6XgaPAucx8FaVr5zbwrHk/uNhe\n84uIt5RWzNebvxco24BHvJqqWTOrqoE5VQ162cmIiCXgBjABTmXmemYuA+8pg3cAflEOI12OiNP5\n98CoHcoVqlZm5sSHQbNmVlUDc6pa9FJkZOZ3ysjhO5m521yJAnhMGc/eNie6T2lMtBkRq7BXrR8D\n7k39v3FcidHcMauqgTlVLfp8XTJ9Partib8FTDLzSnsiutnie0J5ULYpW4AfgQuZ+amXxeq/ZlZV\nA3OqGgzaJyMingObmXk3IgJYyDLt7xDlQTgJ7Gbm1mCLlDCrqoM51dgMVmREGa7zEjifmW+az9qO\nc9JomFXVwJxqjIa4wtrOazgDfJt6GDaAmxFxsO81Sfsxq6qBOdWY9d7xc+qA0QrwMCLWKNewloCL\nmfml7zVJ+zGrqoE51ZgN8rqkOYj0DjgO/AQ2MtO2tRods6oamFON1ZBnMp4CH4BrmfljkEVI/8Cs\nqgbmVGM0ZJGx131OGjOzqhqYU43RaEa9S5Kk+TL4FFZJkjSfLDIkSVInLDIkSVInLDIkSVInLDIk\nSVInLDIkSVInLDIkSVInLDIkSVInLDIkSVInLDIkSVIn/gCoDgS2uNj2+wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xe8970f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4),index=pd.date_range('1/1/2000', periods=1000),columns=['A', 'B', 'C', 'D'])\n",
    "df = df.cumsum()\n",
    "df.rolling(window=60).sum().plot(subplots=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.1 Method Summary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这一小节介绍了`Rolling`类提供的统计函数，`Rolling`类提供的统计函数都是一些常用的统计函数，那我们如果想要得到一些`Rolling`类提供的统计函数之外的功能要怎样做了？这一小节也对此进行了介绍。\n",
    "\n",
    "要对`Rolling`对象实现自定义的功能，可以通过`apply`来实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x12757fd0>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nOXr0aINtnXOsWrVKPd5FIuzOO+/k9OnTrFixwutQms3v99OxY0f1J4gxKgqkXlUTlHz22WcNtt29\nezeHDh1SUSASYUlJSQwfPpz33nvP61Carao/ge4qxhYVBVKvIUOGMHDgQNasWdNg22XLltGxY0ey\nsrKiEJlI2/azn/2MvLw8KioqvA6lydSfIHapKJB6mdmF55cNWbhwIbfddpvmMBeJgtzcXE6ePMlH\nH33kdShNVlRURGlpabMnQZLIUVEgDcrJyWH79u0cOXKkzjY7d+6koKCAe+65J4qRibRdKSkp+Hw+\nXnnlFa9DaTK/30+HDh3w+XxehyI1qCiQBlXN+V7fI4Tf/e53XHHFFRprXySK7rvvPlasWME333zj\ndShNsnr1atLT00lMTPQ6FKlBRYE0aMCAASQnJ7Ny5cpaPy8oKGDx4sXMmjWLjh07Rjk6kbYrNzeX\n7t27M2/ePK9DabTvv/+eVatWMX78eK9DkVq0bBQNaTNuvvlmFi1aRCAQoF27i2vJGTNmkJSUxC9/\n+UtvghNpoxITE3nggQd48cUXeeyxx+jZs2ejty0uLmbv3r2cO3cO5xxHjx5l3759dOvWjXHjxpGa\nmhqRmDdt2kR5eTk33XRTRPYvLeSci/kFSAPc1q1bnXhj3bp1DnAbN268aP2aNWsc4N577z2PIhNp\n244cOeISExPdww8/3GDbQCDglixZ4pKSkhxwydK/f3+XmJjoADd27Fi3Zs0aFwgEwhrvY4895nr3\n7u0qKyvDul+p29atW6v+jtNcA9+3enwgjeLz+ejTp89F70U753j88ccZNWoUd9xxh4fRibRdvXv3\nZubMmTz33HP1jidSUVHBvffeS25uLklJSbz//vvs3buXkpISDh48yHfffcfBgwc5ceIE7777LqWl\npVx//fVce+21zJs3j1OnTrU4Vucc77zzDhMnTrzkjqPEiIaqhlhY0J2CmPCb3/zG9ejRw5WVlTnn\nnHv55Zcd4FatWuVxZCJt2/fff+9GjRrlhg0b5o4fP37J52VlZW7MmDGuU6dO7q233mrUPgOBgFu2\nbJmbOHGia9eunfvBD37g5syZ486fP9/sONevX+8A5/f7m70Pabqm3Cnw/Au/MYuKgthQUlLiunXr\n5m655RY3f/58l5iY6KZOnep1WCLinNuzZ4/r0aOHy8rKcidOnLiw/uuvv3YpKSmuR48ebu3atc3a\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12970048>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mad = lambda x: np.fabs(x - x.mean()).mean()\n",
    "s.rolling(window=60).apply(mad).plot(style='k')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.2 Rolling Windows"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将win_type传递给.rolling会生成一个通用的滚动窗口计算，根据win_type进行加权。\n",
    "\n",
    "关于win_type的解释可以参考下面的这个文章：https://stackoverflow.com/questions/42999175/what-is-the-intuition-behind-win-type-argument-in-rolling-function-of-pandas\n",
    "\n",
    "这跟信号处理相关，我目前还不了解。并且pandas的win_type是参考的scipy的，https://docs.scipy.org/doc/scipy/reference/signal.html#window-functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    " ser = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01         NaN\n",
       "2000-01-02         NaN\n",
       "2000-01-03         NaN\n",
       "2000-01-04         NaN\n",
       "2000-01-05   -1.076368\n",
       "2000-01-06   -0.425704\n",
       "2000-01-07   -0.182924\n",
       "2000-01-08    0.149150\n",
       "2000-01-09    0.103785\n",
       "2000-01-10    0.306055\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " ser.rolling(window=5, win_type='triang').mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01         NaN\n",
       "2000-01-02         NaN\n",
       "2000-01-03         NaN\n",
       "2000-01-04         NaN\n",
       "2000-01-05   -0.892239\n",
       "2000-01-06   -0.484419\n",
       "2000-01-07   -0.452003\n",
       "2000-01-08    0.231906\n",
       "2000-01-09    0.175564\n",
       "2000-01-10    0.252231\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " ser.rolling(window=5, win_type='boxcar').mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2000-01-01         NaN\n",
       "2000-01-02         NaN\n",
       "2000-01-03         NaN\n",
       "2000-01-04         NaN\n",
       "2000-01-05   -2.551513\n",
       "2000-01-06    0.781083\n",
       "2000-01-07   -0.419893\n",
       "2000-01-08    0.672401\n",
       "2000-01-09   -0.742092\n",
       "2000-01-10    0.868029\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " ser.rolling(window=5, win_type='gaussian').mean(std=0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.3 Time-aware Rolling"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "该功能是在pandas的 version 0.19.0版本中新增的，`rolling`方法新增了一个表示offset的参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "New in version 0.19.0 are the ability to pass an offset (or convertible) to a .rolling() method and have it produce\n",
    "variable sized windows based on the passed time window. For each time point, this includes all preceding values\n",
    "occurring within the indicated time delta."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This can be particularly useful for a non-regular time frequency index."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "2013-01-01 09:00:00  0.0\n",
       "2013-01-01 09:00:01  1.0\n",
       "2013-01-01 09:00:02  2.0\n",
       "2013-01-01 09:00:03  NaN\n",
       "2013-01-01 09:00:04  4.0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},index=pd.date_range('20130101 09:00:00', periods=5, freq='s'))\n",
    "dft"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is a regular frequency index. Using an integer window parameter works to roll along the window frequency."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "2013-01-01 09:00:00  NaN\n",
       "2013-01-01 09:00:01  1.0\n",
       "2013-01-01 09:00:02  3.0\n",
       "2013-01-01 09:00:03  NaN\n",
       "2013-01-01 09:00:04  NaN"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft.rolling(2).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "2013-01-01 09:00:00  0.0\n",
       "2013-01-01 09:00:01  1.0\n",
       "2013-01-01 09:00:02  3.0\n",
       "2013-01-01 09:00:03  2.0\n",
       "2013-01-01 09:00:04  4.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft.rolling(2, min_periods=1).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Specifying an offset allows a more intuitive specification of the rolling frequency."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "2013-01-01 09:00:00  0.0\n",
       "2013-01-01 09:00:01  1.0\n",
       "2013-01-01 09:00:02  3.0\n",
       "2013-01-01 09:00:03  2.0\n",
       "2013-01-01 09:00:04  4.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft.rolling('2s').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using a non-regular, but still monotonic index, rolling with an integer window does not impart any special calculation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:05</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:06</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "foo                     \n",
       "2013-01-01 09:00:00  0.0\n",
       "2013-01-01 09:00:02  1.0\n",
       "2013-01-01 09:00:02  2.0\n",
       "2013-01-01 09:00:05  NaN\n",
       "2013-01-01 09:00:06  4.0"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},index = pd.Index([pd.Timestamp('20130101 09:00:00'),\n",
    "                                                                 pd.Timestamp('20130101 09:00:02'),\n",
    "                                                                 pd.Timestamp('20130101 09:00:02'),\n",
    "                                                                 pd.Timestamp('20130101 09:00:05'),\n",
    "                                                                 pd.Timestamp('20130101 09:00:06')],name='foo'))\n",
    "dft"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:05</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:06</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "foo                     \n",
       "2013-01-01 09:00:00  NaN\n",
       "2013-01-01 09:00:02  1.0\n",
       "2013-01-01 09:00:02  3.0\n",
       "2013-01-01 09:00:05  NaN\n",
       "2013-01-01 09:00:06  NaN"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " dft.rolling(2).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the time-specification generates variable windows for this sparse data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:00</th>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:05</th>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:06</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                       B\n",
       "foo                     \n",
       "2013-01-01 09:00:00  0.0\n",
       "2013-01-01 09:00:02  1.0\n",
       "2013-01-01 09:00:02  3.0\n",
       "2013-01-01 09:00:05  NaN\n",
       "2013-01-01 09:00:06  4.0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft.rolling('2s').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Furthermore, we now allow an optional on parameter to specify a column (rather than the default of the index) in a\n",
    "DataFrame."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>foo</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2013-01-01 09:00:00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2013-01-01 09:00:02</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2013-01-01 09:00:02</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2013-01-01 09:00:05</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2013-01-01 09:00:06</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  foo    B\n",
       "0 2013-01-01 09:00:00  0.0\n",
       "1 2013-01-01 09:00:02  1.0\n",
       "2 2013-01-01 09:00:02  2.0\n",
       "3 2013-01-01 09:00:05  NaN\n",
       "4 2013-01-01 09:00:06  4.0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft = dft.reset_index()\n",
    "dft"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>foo</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2013-01-01 09:00:00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2013-01-01 09:00:02</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2013-01-01 09:00:02</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2013-01-01 09:00:05</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2013-01-01 09:00:06</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  foo    B\n",
       "0 2013-01-01 09:00:00  0.0\n",
       "1 2013-01-01 09:00:02  1.0\n",
       "2 2013-01-01 09:00:02  3.0\n",
       "3 2013-01-01 09:00:05  NaN\n",
       "4 2013-01-01 09:00:06  4.0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dft.rolling('2s', on='foo').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.4 Rolling Window Endpoints"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "New in version 0.20.0.\n",
    "\n",
    "The inclusion of the interval endpoints in rolling window calculations can be specified with the closed parameter:\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For example, having the right endpoint open is useful in many problems that require that there is no contamination\n",
    "from present information back to past information. This allows the rolling window to compute statistics “up to that\n",
    "point in time”, but not including that point in time.\n",
    "\n",
    "这些内容都是和时序相关的；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:06</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     x\n",
       "2013-01-01 09:00:01  1\n",
       "2013-01-01 09:00:02  1\n",
       "2013-01-01 09:00:03  1\n",
       "2013-01-01 09:00:04  1\n",
       "2013-01-01 09:00:06  1"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'x': 1},index = [pd.Timestamp('20130101 09:00:01'),\n",
    "                                    pd.Timestamp('20130101 09:00:02'),\n",
    "                                    pd.Timestamp('20130101 09:00:03'),\n",
    "                                    pd.Timestamp('20130101 09:00:04'),\n",
    "                                    pd.Timestamp('20130101 09:00:06')])\n",
    "df            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "df[\"right\"] = df.rolling('2s', closed='right').x.sum() # default\n",
    "\n",
    "df[\"both\"] = df.rolling('2s', closed='both').x.sum()\n",
    "\n",
    "df[\"left\"] = df.rolling('2s', closed='left').x.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:01</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:02</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:03</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:04</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01 09:00:06</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     x\n",
       "2013-01-01 09:00:01  1\n",
       "2013-01-01 09:00:02  1\n",
       "2013-01-01 09:00:03  1\n",
       "2013-01-01 09:00:04  1\n",
       "2013-01-01 09:00:06  1"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Currently, this feature is only implemented for time-based windows. For fixed windows, the closed parameter cannot\n",
    "be set and the rolling window will always have both endpoints closed."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.5 Time-aware Rolling vs. Resampling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.7 Binary Window Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4),index=pd.date_range('1/1/2000', periods=1000),columns=['A', 'B', 'C', 'D'])\n",
    "df = df.cumsum()\n",
    "df2 = df[:20]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2000-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-03</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-04</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-05</th>\n",
       "      <td>0.121289</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.742310</td>\n",
       "      <td>0.414836</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-06</th>\n",
       "      <td>0.837543</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.463211</td>\n",
       "      <td>0.354510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-07</th>\n",
       "      <td>0.786672</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.274098</td>\n",
       "      <td>-0.047046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-08</th>\n",
       "      <td>0.581424</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.463683</td>\n",
       "      <td>-0.254108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-09</th>\n",
       "      <td>0.397150</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.345762</td>\n",
       "      <td>-0.534885</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-10</th>\n",
       "      <td>0.765657</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.773965</td>\n",
       "      <td>0.201838</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-11</th>\n",
       "      <td>0.104735</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.782340</td>\n",
       "      <td>0.185506</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-12</th>\n",
       "      <td>-0.277777</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.515603</td>\n",
       "      <td>-0.182860</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-13</th>\n",
       "      <td>-0.362287</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.306147</td>\n",
       "      <td>0.326081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-14</th>\n",
       "      <td>0.224675</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.081539</td>\n",
       "      <td>-0.270712</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-15</th>\n",
       "      <td>0.815574</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.460331</td>\n",
       "      <td>0.106719</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-16</th>\n",
       "      <td>0.176883</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.501677</td>\n",
       "      <td>0.925037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-17</th>\n",
       "      <td>0.197243</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.037881</td>\n",
       "      <td>0.918569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-18</th>\n",
       "      <td>0.130880</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.821581</td>\n",
       "      <td>0.900829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-19</th>\n",
       "      <td>0.450981</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.858428</td>\n",
       "      <td>0.894038</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-01-20</th>\n",
       "      <td>0.797588</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-0.928646</td>\n",
       "      <td>0.757101</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A    B         C         D\n",
       "2000-01-01       NaN  NaN       NaN       NaN\n",
       "2000-01-02       NaN  NaN       NaN       NaN\n",
       "2000-01-03       NaN  NaN       NaN       NaN\n",
       "2000-01-04       NaN  NaN       NaN       NaN\n",
       "2000-01-05  0.121289  1.0  0.742310  0.414836\n",
       "2000-01-06  0.837543  1.0  0.463211  0.354510\n",
       "2000-01-07  0.786672  1.0 -0.274098 -0.047046\n",
       "2000-01-08  0.581424  1.0 -0.463683 -0.254108\n",
       "2000-01-09  0.397150  1.0 -0.345762 -0.534885\n",
       "2000-01-10  0.765657  1.0  0.773965  0.201838\n",
       "2000-01-11  0.104735  1.0  0.782340  0.185506\n",
       "2000-01-12 -0.277777  1.0  0.515603 -0.182860\n",
       "2000-01-13 -0.362287  1.0 -0.306147  0.326081\n",
       "2000-01-14  0.224675  1.0  0.081539 -0.270712\n",
       "2000-01-15  0.815574  1.0  0.460331  0.106719\n",
       "2000-01-16  0.176883  1.0  0.501677  0.925037\n",
       "2000-01-17  0.197243  1.0 -0.037881  0.918569\n",
       "2000-01-18  0.130880  1.0 -0.821581  0.900829\n",
       "2000-01-19  0.450981  1.0 -0.858428  0.894038\n",
       "2000-01-20  0.797588  1.0 -0.928646  0.757101"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r=df2.rolling(window=5)\n",
    "r.corr(df2['B'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\ops.py:1167: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n",
      "  result = method(y)\n"
     ]
    },
    {
     "ename": "TypeError",
     "evalue": "invalid type comparison",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-40-ccab88f1d79a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcorr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf2\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'B'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36mcorr\u001b[0;34m(self, method, min_periods)\u001b[0m\n\u001b[1;32m   6504\u001b[0m         \u001b[0mmat\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnumeric_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   6505\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6506\u001b[0;31m         \u001b[1;32mif\u001b[0m \u001b[0mmethod\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'pearson'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   6507\u001b[0m             \u001b[0mcorrel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlibalgos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnancorr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_ensure_float64\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mminp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmin_periods\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   6508\u001b[0m         \u001b[1;32melif\u001b[0m \u001b[0mmethod\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'spearman'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\ops.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(self, other, axis)\u001b[0m\n\u001b[1;32m   1281\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1282\u001b[0m             \u001b[1;32mwith\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merrstate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mall\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'ignore'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1283\u001b[0;31m                 \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mna_op\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mother\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1284\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mis_scalar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mres\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1285\u001b[0m                 raise TypeError('Could not compare {typ} type with Series'\n",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\ops.py\u001b[0m in \u001b[0;36mna_op\u001b[0;34m(x, y)\u001b[0m\n\u001b[1;32m   1167\u001b[0m                     \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1168\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mNotImplemented\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1169\u001b[0;31m                     \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"invalid type comparison\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1170\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1171\u001b[0m                 \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: invalid type comparison"
     ]
    }
   ],
   "source": [
    "df.corr(df2['B'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 14.2.8 Computing rolling pairwise covariances and correlations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "\"['B' 'C' 'D'] not in index\"",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-16-e4af8d872101>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcovs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'B'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'C'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'D'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrolling\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mwindow\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m50\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcov\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'A'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'B'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'C'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mpairwise\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2680\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mSeries\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mIndex\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   2681\u001b[0m             \u001b[1;31m# either boolean or fancy integer index\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2682\u001b[0;31m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2683\u001b[0m         \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mDataFrame\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   2684\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_getitem_frame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m_getitem_array\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m   2724\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   2725\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2726\u001b[0;31m             \u001b[0mindexer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_convert_to_indexer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2727\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_take\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   2728\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\Program Files\\Anaconda3\\lib\\site-packages\\pandas\\core\\indexing.py\u001b[0m in \u001b[0;36m_convert_to_indexer\u001b[0;34m(self, obj, axis, is_setter)\u001b[0m\n\u001b[1;32m   1325\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[0mmask\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0many\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1326\u001b[0m                     raise KeyError('{mask} not in index'\n\u001b[0;32m-> 1327\u001b[0;31m                                    .format(mask=objarr[mask]))\n\u001b[0m\u001b[1;32m   1328\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1329\u001b[0m                 \u001b[1;32mreturn\u001b[0m \u001b[0mcom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_values_from_object\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mindexer\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: \"['B' 'C' 'D'] not in index\""
     ]
    }
   ],
   "source": [
    "covs = df[['B','C','D']].rolling(window=50).cov(df[['A','B','C']],pairwise=True)"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
